mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-06-08 17:04:41 -04:00
Rearranged sequencing of audio streams and devices.
The code was starting streams linked to closed devices which may be causing issues on the Mac version. I have refactored to ensure that devices are always opened before related audio streams are started. Made .h C++ headers emacs friendly. Removed some code in the MainWindow contructor that read the log file but failed to check if the file exists and didn't do anything with the data anyway. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3977 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
+62
-62
@@ -7,7 +7,7 @@
|
||||
#include "moc_Detector.cpp"
|
||||
|
||||
extern "C" {
|
||||
void fil4_(qint16*, qint32*, qint16*, qint32*);
|
||||
void fil4_(qint16*, qint32*, qint16*, qint32*);
|
||||
}
|
||||
|
||||
Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds,
|
||||
@@ -21,7 +21,7 @@ Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds,
|
||||
, m_monitoring (false)
|
||||
, m_starting (false)
|
||||
, m_buffer ((downSampleFactor > 1) ?
|
||||
new short [framesPerSignal * downSampleFactor] : 0)
|
||||
new short [framesPerSignal * downSampleFactor] : 0)
|
||||
, m_bufferPos (0)
|
||||
{
|
||||
clear ();
|
||||
@@ -50,76 +50,76 @@ qint64 Detector::writeData (char const * data, qint64 maxSize)
|
||||
if (m_monitoring) {
|
||||
// no torn frames
|
||||
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ())));
|
||||
// these are in terms of input frames (not down sampled)
|
||||
size_t framesAcceptable ((sizeof (jt9com_.d2) /
|
||||
sizeof (jt9com_.d2[0]) - jt9com_.kin) * m_downSampleFactor);
|
||||
size_t framesAccepted (qMin (static_cast<size_t> (maxSize /
|
||||
bytesPerFrame ()), framesAcceptable));
|
||||
// these are in terms of input frames (not down sampled)
|
||||
size_t framesAcceptable ((sizeof (jt9com_.d2) /
|
||||
sizeof (jt9com_.d2[0]) - jt9com_.kin) * m_downSampleFactor);
|
||||
size_t framesAccepted (qMin (static_cast<size_t> (maxSize /
|
||||
bytesPerFrame ()), framesAcceptable));
|
||||
|
||||
if (framesAccepted < static_cast<size_t> (maxSize / bytesPerFrame ())) {
|
||||
qDebug () << "dropped " << maxSize / bytesPerFrame () - framesAccepted
|
||||
<< " frames of data on the floor!";
|
||||
}
|
||||
if (framesAccepted < static_cast<size_t> (maxSize / bytesPerFrame ())) {
|
||||
qDebug () << "dropped " << maxSize / bytesPerFrame () - framesAccepted
|
||||
<< " frames of data on the floor!";
|
||||
}
|
||||
|
||||
for (unsigned remaining = framesAccepted; remaining; ) {
|
||||
size_t numFramesProcessed (qMin (m_framesPerSignal *
|
||||
m_downSampleFactor - m_bufferPos, remaining));
|
||||
for (unsigned remaining = framesAccepted; remaining; ) {
|
||||
size_t numFramesProcessed (qMin (m_framesPerSignal *
|
||||
m_downSampleFactor - m_bufferPos, remaining));
|
||||
|
||||
if(m_downSampleFactor > 1) {
|
||||
store (&data[(framesAccepted - remaining) * bytesPerFrame ()],
|
||||
numFramesProcessed, &m_buffer[m_bufferPos]);
|
||||
m_bufferPos += numFramesProcessed;
|
||||
if(m_bufferPos==m_framesPerSignal*m_downSampleFactor && m_monitoring) {
|
||||
qint32 framesToProcess (m_framesPerSignal * m_downSampleFactor);
|
||||
qint32 framesAfterDownSample;
|
||||
if(framesToProcess==13824 and jt9com_.kin>=0 and jt9com_.kin<1440000) {
|
||||
fil4_(&m_buffer[0], &framesToProcess, &jt9com_.d2[jt9com_.kin],
|
||||
&framesAfterDownSample);
|
||||
jt9com_.kin += framesAfterDownSample;
|
||||
} else {
|
||||
qDebug() << "framesToProcess = " << framesToProcess;
|
||||
qDebug() << "jt9com_.kin = " << jt9com_.kin;
|
||||
qDebug() << "secondInPeriod = " << secondInPeriod();
|
||||
if(m_downSampleFactor > 1) {
|
||||
store (&data[(framesAccepted - remaining) * bytesPerFrame ()],
|
||||
numFramesProcessed, &m_buffer[m_bufferPos]);
|
||||
m_bufferPos += numFramesProcessed;
|
||||
if(m_bufferPos==m_framesPerSignal*m_downSampleFactor && m_monitoring) {
|
||||
qint32 framesToProcess (m_framesPerSignal * m_downSampleFactor);
|
||||
qint32 framesAfterDownSample;
|
||||
if(framesToProcess==13824 and jt9com_.kin>=0 and jt9com_.kin<1440000) {
|
||||
fil4_(&m_buffer[0], &framesToProcess, &jt9com_.d2[jt9com_.kin],
|
||||
&framesAfterDownSample);
|
||||
jt9com_.kin += framesAfterDownSample;
|
||||
} else {
|
||||
qDebug() << "framesToProcess = " << framesToProcess;
|
||||
qDebug() << "jt9com_.kin = " << jt9com_.kin;
|
||||
qDebug() << "secondInPeriod = " << secondInPeriod();
|
||||
}
|
||||
Q_EMIT framesWritten (jt9com_.kin);
|
||||
m_bufferPos = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
store (&data[(framesAccepted - remaining) * bytesPerFrame ()],
|
||||
numFramesProcessed, &jt9com_.d2[jt9com_.kin]);
|
||||
m_bufferPos += numFramesProcessed;
|
||||
jt9com_.kin += numFramesProcessed;
|
||||
if (m_bufferPos == static_cast<unsigned> (m_framesPerSignal) &&
|
||||
m_monitoring) {
|
||||
Q_EMIT framesWritten (jt9com_.kin);
|
||||
m_bufferPos = 0;
|
||||
}
|
||||
Q_EMIT framesWritten (jt9com_.kin);
|
||||
m_bufferPos = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
store (&data[(framesAccepted - remaining) * bytesPerFrame ()],
|
||||
numFramesProcessed, &jt9com_.d2[jt9com_.kin]);
|
||||
m_bufferPos += numFramesProcessed;
|
||||
jt9com_.kin += numFramesProcessed;
|
||||
if (m_bufferPos == static_cast<unsigned> (m_framesPerSignal) &&
|
||||
m_monitoring) {
|
||||
Q_EMIT framesWritten (jt9com_.kin);
|
||||
m_bufferPos = 0;
|
||||
if (!secondInPeriod ()) {
|
||||
if (!m_starting) {
|
||||
// next samples will be in new period so wrap around to
|
||||
// start of buffer
|
||||
//
|
||||
// we don't bother calling reset () since we expect to fill
|
||||
// the whole buffer and don't need to waste cycles zeroing
|
||||
jt9com_.kin = 0;
|
||||
m_bufferPos = 0;
|
||||
m_starting = true;
|
||||
}
|
||||
} else if(m_starting) {
|
||||
m_starting = false;
|
||||
}
|
||||
remaining -= numFramesProcessed;
|
||||
}
|
||||
|
||||
if (!secondInPeriod ()) {
|
||||
if (!m_starting) {
|
||||
// next samples will be in new period so wrap around to
|
||||
// start of buffer
|
||||
//
|
||||
// we don't bother calling reset () since we expect to fill
|
||||
// the whole buffer and don't need to waste cycles zeroing
|
||||
jt9com_.kin = 0;
|
||||
m_bufferPos = 0;
|
||||
m_starting = true;
|
||||
}
|
||||
} else if(m_starting) {
|
||||
m_starting = false;
|
||||
}
|
||||
remaining -= numFramesProcessed;
|
||||
} else {
|
||||
jt9com_.kin = 0;
|
||||
m_bufferPos = 0;
|
||||
}
|
||||
} else {
|
||||
jt9com_.kin = 0;
|
||||
m_bufferPos = 0;
|
||||
}
|
||||
|
||||
return maxSize; // we drop any data past the end of the buffer on
|
||||
// the floor until the next period starts
|
||||
return maxSize; // we drop any data past the end of the buffer on
|
||||
// the floor until the next period starts
|
||||
}
|
||||
|
||||
unsigned Detector::secondInPeriod () const
|
||||
|
||||
Reference in New Issue
Block a user