diff --git a/plugins/channeltx/modam/ammod.cpp b/plugins/channeltx/modam/ammod.cpp index 3d38ae95f..17f91e48b 100644 --- a/plugins/channeltx/modam/ammod.cpp +++ b/plugins/channeltx/modam/ammod.cpp @@ -146,7 +146,9 @@ void AMMod::apply() if ((m_config.m_inputFrequencyOffset != m_running.m_inputFrequencyOffset) || (m_config.m_outputSampleRate != m_running.m_outputSampleRate)) { + m_settingsMutex.lock(); m_carrierNco.setFreq(m_config.m_inputFrequencyOffset, m_config.m_outputSampleRate); + m_settingsMutex.unlock(); } if((m_config.m_outputSampleRate != m_running.m_outputSampleRate) || diff --git a/plugins/samplesink/filesink/filesinkthread.cpp b/plugins/samplesink/filesink/filesinkthread.cpp index 6c15a0193..983349f9d 100644 --- a/plugins/samplesink/filesink/filesinkthread.cpp +++ b/plugins/samplesink/filesink/filesinkthread.cpp @@ -88,6 +88,11 @@ void FileSinkThread::setSamplerate(int samplerate) stopWork(); } + // resize sample FIFO + if (m_sampleFifo) { + m_sampleFifo->resize(samplerate, samplerate/4); // 1s buffer with 250ms write chunk size + } + m_samplerate = samplerate; m_samplesChunkSize = (m_samplerate * m_throttlems) / 1000; } diff --git a/plugins/samplesink/filesink/filesinkthread.h b/plugins/samplesink/filesink/filesinkthread.h index 86bfffd67..2ca252534 100644 --- a/plugins/samplesink/filesink/filesinkthread.h +++ b/plugins/samplesink/filesink/filesinkthread.h @@ -57,7 +57,7 @@ private: std::ofstream* m_ofstream; quint8 *m_buf; std::size_t m_bufsize; - std::size_t m_samplesChunkSize; + unsigned int m_samplesChunkSize; SampleSourceFifo* m_sampleFifo; std::size_t m_samplesCount; diff --git a/sdrbase/device/devicesourceapi.cpp b/sdrbase/device/devicesourceapi.cpp index ef1df5ad6..fbf5c0998 100644 --- a/sdrbase/device/devicesourceapi.cpp +++ b/sdrbase/device/devicesourceapi.cpp @@ -332,7 +332,7 @@ void DeviceSourceAPI::loadChannelSettings(const Preset *preset, PluginAPI *plugi } else { - qDebug("DeviceSourceAPI::loadChannelSettings: Loading preset [%s | %s] not a source preset\n", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); + qDebug("DeviceSourceAPI::loadChannelSettings: Loading preset [%s | %s] not a source preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); } } diff --git a/sdrbase/dsp/dspdevicesinkengine.cpp b/sdrbase/dsp/dspdevicesinkengine.cpp index 0a80efc14..71733fb5e 100644 --- a/sdrbase/dsp/dspdevicesinkengine.cpp +++ b/sdrbase/dsp/dspdevicesinkengine.cpp @@ -202,7 +202,6 @@ void DSPDeviceSinkEngine::work() { (*it)->pull(s); s /= (m_threadedBasebandSampleSources.size() + m_basebandSampleSources.size()); - (*writeAt) += s; if (sourceOccurence == 0) { (*writeAt) = s; diff --git a/sdrbase/dsp/nco.cpp b/sdrbase/dsp/nco.cpp index 5b0ebb90d..c06c31a53 100644 --- a/sdrbase/dsp/nco.cpp +++ b/sdrbase/dsp/nco.cpp @@ -44,7 +44,7 @@ NCO::NCO() void NCO::setFreq(Real freq, Real sampleRate) { m_phaseIncrement = (freq * TableSize) / sampleRate; - qDebug("NCO phase inc %d", m_phaseIncrement); + qDebug("NCO freq: %f phase inc %d", freq, m_phaseIncrement); } float NCO::next() diff --git a/sdrbase/dsp/samplesourcefifo.cpp b/sdrbase/dsp/samplesourcefifo.cpp index 898f30bb3..d35b3e461 100644 --- a/sdrbase/dsp/samplesourcefifo.cpp +++ b/sdrbase/dsp/samplesourcefifo.cpp @@ -31,6 +31,17 @@ SampleSourceFifo::SampleSourceFifo(uint32_t size, uint32_t samplesChunkSize) : SampleSourceFifo::~SampleSourceFifo() {} +void SampleSourceFifo::resize(uint32_t size, uint32_t samplesChunkSize) +{ + qDebug("SampleSourceFifo::resize: %d, %d", size, samplesChunkSize); + assert(samplesChunkSize <= size/4); + + m_size = size; + m_samplesChunkSize = samplesChunkSize; + m_data.resize(2*m_size); + init(); +} + void SampleSourceFifo::init() { memset(&m_data[0], 0, sizeof(2*m_size*sizeof(Sample))); @@ -84,9 +95,9 @@ void SampleSourceFifo::write(const Sample& sample) } } -void SampleSourceFifo::getReadIterator(SampleVector::iterator& writeUntil) +void SampleSourceFifo::getReadIterator(SampleVector::iterator& readUntil) { - writeUntil = m_data.begin() + m_size + m_ir; + readUntil = m_data.begin() + m_size + m_ir; } void SampleSourceFifo::getWriteIterator(SampleVector::iterator& writeAt) diff --git a/sdrbase/dsp/samplesourcefifo.h b/sdrbase/dsp/samplesourcefifo.h index aa110e2f6..517b05f81 100644 --- a/sdrbase/dsp/samplesourcefifo.h +++ b/sdrbase/dsp/samplesourcefifo.h @@ -33,6 +33,7 @@ public: unsigned int getChunkSize() const { return m_samplesChunkSize; } + void resize(uint32_t size, uint32_t samplesChunkSize); void init(); /** begin read at current read point for the given length and activate R/W signals */ void readAndSignal(SampleVector::iterator& beginRead, unsigned int nbSamples);