diff --git a/src/demod/DemodulatorThread.cpp b/src/demod/DemodulatorThread.cpp index 133beb4..220560f 100644 --- a/src/demod/DemodulatorThread.cpp +++ b/src/demod/DemodulatorThread.cpp @@ -65,8 +65,7 @@ void DemodulatorThread::run() { iqAutoGain = agc_crcf_create(); agc_crcf_set_bandwidth(iqAutoGain, 0.1); - AudioThreadInput *ati_vis = new AudioThreadInput; - ati_vis->data.reserve(DEMOD_VIS_SIZE); + ReBuffer audioVisBuffers; std::cout << "Demodulator thread started.." << std::endl; @@ -358,8 +357,8 @@ void DemodulatorThread::run() { } if (ati && audioVisOutputQueue != NULL && audioVisOutputQueue->empty()) { - - ati_vis->busy_update.lock(); + AudioThreadInput *ati_vis = audioVisBuffers.getBuffer(); + ati_vis->setRefCount(1); ati_vis->sampleRate = inp->sampleRate; ati_vis->inputRate = inp->sampleRate; @@ -404,7 +403,6 @@ void DemodulatorThread::run() { // std::cout << "Signal: " << agc_crcf_get_signal_level(agc) << " -- " << agc_crcf_get_rssi(agc) << "dB " << std::endl; } - ati_vis->busy_update.unlock(); audioVisOutputQueue->push(ati_vis); } @@ -495,7 +493,7 @@ void DemodulatorThread::run() { AudioThreadInput *dummy_vis; audioVisOutputQueue->pop(dummy_vis); } - delete ati_vis; + audioVisBuffers.purge(); DemodulatorThreadCommand tCmd(DemodulatorThreadCommand::DEMOD_THREAD_CMD_DEMOD_TERMINATED); tCmd.context = this; diff --git a/src/process/ScopeVisualProcessor.cpp b/src/process/ScopeVisualProcessor.cpp index 7282ec9..1bfb640 100644 --- a/src/process/ScopeVisualProcessor.cpp +++ b/src/process/ScopeVisualProcessor.cpp @@ -6,6 +6,8 @@ ScopeVisualProcessor::ScopeVisualProcessor(): fftInData(NULL), fftwOutput(NULL), scopeEnabled.store(true); spectrumEnabled.store(true); fft_average_rate = 0.65; + fft_ceil_ma = fft_ceil_maa = 0; + fft_floor_ma = fft_floor_maa = 0; } ScopeVisualProcessor::~ScopeVisualProcessor() { @@ -66,9 +68,7 @@ void ScopeVisualProcessor::process() { audioInputData->decRefCount(); return; } - - audioInputData->busy_update.lock(); - + ScopeRenderData *renderData = NULL; if (scopeEnabled) { @@ -117,7 +117,6 @@ void ScopeVisualProcessor::process() { } if (spectrumEnabled) { - renderData = outputBuffers.getBuffer(); iMax = audioInputData->data.size(); if (audioInputData->channels==1) { @@ -157,9 +156,9 @@ void ScopeVisualProcessor::process() { } for (i = 0; i < (fftSize/2); i++) { - fft_result_maa[i] += (fft_result_ma[i] - fft_result_maa[i]) * fft_average_rate; fft_result_ma[i] += (fft_result[i] - fft_result_ma[i]) * fft_average_rate; - + fft_result_maa[i] += (fft_result_ma[i] - fft_result_maa[i]) * fft_average_rate; + if (fft_result_maa[i] > fft_ceil) { fft_ceil = fft_result_maa[i]; } @@ -168,6 +167,11 @@ void ScopeVisualProcessor::process() { } } + if (fft_floor == fft_ceil) { + audioInputData->decRefCount(); + return; + } + fft_ceil_ma = fft_ceil_ma + (fft_ceil - fft_ceil_ma) * 0.05; fft_ceil_maa = fft_ceil_maa + (fft_ceil_ma - fft_ceil_maa) * 0.05; @@ -180,6 +184,8 @@ void ScopeVisualProcessor::process() { outSize = (int)floor((float)outSize * ((float)audioInputData->sampleRate/(float)audioInputData->inputRate)); } + renderData = outputBuffers.getBuffer(); + if (renderData->waveform_points.size() != outSize*2) { renderData->waveform_points.resize(outSize*2); } @@ -199,6 +205,6 @@ void ScopeVisualProcessor::process() { distribute(renderData); } - audioInputData->busy_update.unlock(); + audioInputData->decRefCount(); } } diff --git a/src/sdr/SDRPostThread.cpp b/src/sdr/SDRPostThread.cpp index 766c814..a7b29e9 100644 --- a/src/sdr/SDRPostThread.cpp +++ b/src/sdr/SDRPostThread.cpp @@ -306,9 +306,9 @@ void SDRPostThread::run() { iirfilt_crcf_execute_block(dcFilter, &dcBuf[0], chanDataSize, &demodDataOut->data[0]); } else { for (int j = 0; j < chanDataSize; j++) { - idx += numChannels; demodDataOut->data[j] = dataOut[idx]; - } + idx += numChannels; + } } // if (doVis) {