diff --git a/plugins/channeltx/modam/ammod.cpp b/plugins/channeltx/modam/ammod.cpp index ad5f2aebe..d8fe9016f 100644 --- a/plugins/channeltx/modam/ammod.cpp +++ b/plugins/channeltx/modam/ammod.cpp @@ -80,6 +80,7 @@ AMMod::AMMod(DeviceSinkAPI *deviceAPI) : m_deviceAPI->addThreadedSource(m_threadedChannelizer); m_deviceAPI->addChannelAPI(this); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); } @@ -255,6 +256,7 @@ void AMMod::start() << " m_inputFrequencyOffset: " << m_settings.m_inputFrequencyOffset; m_audioFifo.clear(); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); } void AMMod::stop() @@ -376,7 +378,7 @@ void AMMod::seekFileStream(int seekPercentage) } } -void AMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset) +void AMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force) { qDebug() << "AMMod::applyChannelSettings:" << " basebandSampleRate: " << basebandSampleRate @@ -384,14 +386,14 @@ void AMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, i << " inputFrequencyOffset: " << inputFrequencyOffset; if ((inputFrequencyOffset != m_inputFrequencyOffset) || - (outputSampleRate != m_outputSampleRate)) + (outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_carrierNco.setFreq(inputFrequencyOffset, outputSampleRate); m_settingsMutex.unlock(); } - if (outputSampleRate != m_outputSampleRate) + if ((outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_interpolatorDistanceRemain = 0; diff --git a/plugins/channeltx/modam/ammod.h b/plugins/channeltx/modam/ammod.h index a1ba2726b..0dc73ac09 100644 --- a/plugins/channeltx/modam/ammod.h +++ b/plugins/channeltx/modam/ammod.h @@ -310,7 +310,7 @@ private: static const int m_levelNbSamples; - void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset); + void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false); void applySettings(const AMModSettings& settings, bool force = false); void pullAF(Real& sample); void calculateLevel(Real& sample); diff --git a/plugins/channeltx/modatv/atvmod.cpp b/plugins/channeltx/modatv/atvmod.cpp index 5c3e2164b..f28b6ae93 100644 --- a/plugins/channeltx/modatv/atvmod.cpp +++ b/plugins/channeltx/modatv/atvmod.cpp @@ -97,6 +97,7 @@ ATVMod::ATVMod(DeviceSinkAPI *deviceAPI) : m_deviceAPI->addThreadedSource(m_threadedChannelizer); m_deviceAPI->addChannelAPI(this); + applyChannelSettings(m_outputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); // does applyStandard() too; } @@ -489,6 +490,7 @@ void ATVMod::start() { qDebug() << "ATVMod::start: m_outputSampleRate: " << m_outputSampleRate << " m_inputFrequencyOffset: " << m_settings.m_inputFrequencyOffset; + applyChannelSettings(m_outputSampleRate, m_inputFrequencyOffset, true); } void ATVMod::stop() @@ -1024,21 +1026,21 @@ void ATVMod::mixImageAndText(cv::Mat& image) cv::putText(image, m_overlayText, textOrg, fontFace, fontScale, cv::Scalar::all(255*m_settings.m_uniformLevel), thickness, CV_AA); } -void ATVMod::applyChannelSettings(int outputSampleRate, int inputFrequencyOffset) +void ATVMod::applyChannelSettings(int outputSampleRate, int inputFrequencyOffset, bool force) { qDebug() << "AMMod::applyChannelSettings:" << " outputSampleRate: " << outputSampleRate << " inputFrequencyOffset: " << inputFrequencyOffset; if ((inputFrequencyOffset != m_inputFrequencyOffset) || - (outputSampleRate != m_outputSampleRate)) + (outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_carrierNco.setFreq(inputFrequencyOffset, outputSampleRate); m_settingsMutex.unlock(); } - if (outputSampleRate != m_outputSampleRate) + if ((outputSampleRate != m_outputSampleRate) || force) { getBaseValues(outputSampleRate, m_settings.m_nbLines * m_settings.m_fps, m_tvSampleRate, m_pointsPerLine); diff --git a/plugins/channeltx/modatv/atvmod.h b/plugins/channeltx/modatv/atvmod.h index 852e623d7..7045ad66d 100644 --- a/plugins/channeltx/modatv/atvmod.h +++ b/plugins/channeltx/modatv/atvmod.h @@ -561,7 +561,7 @@ private: static const int m_nbBars; //!< number of bars in bar or chessboard patterns static const int m_cameraFPSTestNbFrames; //!< number of frames for camera FPS test - void applyChannelSettings(int outputSampleRate, int inputFrequencyOffset); + void applyChannelSettings(int outputSampleRate, int inputFrequencyOffset, bool force = false); void applySettings(const ATVModSettings& settings, bool force = false); void pullFinalize(Complex& ci, Sample& sample); void pullVideo(Real& sample); diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 24c5b37f9..dad97319c 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -86,6 +86,7 @@ NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) : m_deviceAPI->addThreadedSource(m_threadedChannelizer); m_deviceAPI->addChannelAPI(this); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); } @@ -270,6 +271,7 @@ void NFMMod::start() << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; m_audioFifo.clear(); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); } void NFMMod::stop() @@ -385,7 +387,7 @@ void NFMMod::seekFileStream(int seekPercentage) } } -void NFMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset) +void NFMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force) { qDebug() << "NFMMod::applyChannelSettings:" << " basebandSampleRate: " << basebandSampleRate @@ -393,14 +395,14 @@ void NFMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, << " inputFrequencyOffset: " << inputFrequencyOffset; if ((inputFrequencyOffset != m_inputFrequencyOffset) || - (outputSampleRate != m_outputSampleRate)) + (outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_carrierNco.setFreq(inputFrequencyOffset, outputSampleRate); m_settingsMutex.unlock(); } - if (outputSampleRate != m_outputSampleRate) + if ((outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_interpolatorDistanceRemain = 0; diff --git a/plugins/channeltx/modnfm/nfmmod.h b/plugins/channeltx/modnfm/nfmmod.h index 233a38edb..6725c56d5 100644 --- a/plugins/channeltx/modnfm/nfmmod.h +++ b/plugins/channeltx/modnfm/nfmmod.h @@ -304,7 +304,7 @@ private: CWKeyer m_cwKeyer; static const int m_levelNbSamples; - void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset); + void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false); void applySettings(const NFMModSettings& settings, bool force = false); void pullAF(Real& sample); void calculateLevel(Real& sample); diff --git a/plugins/channeltx/modssb/ssbmod.cpp b/plugins/channeltx/modssb/ssbmod.cpp index be668c836..ad90f716e 100644 --- a/plugins/channeltx/modssb/ssbmod.cpp +++ b/plugins/channeltx/modssb/ssbmod.cpp @@ -104,6 +104,7 @@ SSBMod::SSBMod(DeviceSinkAPI *deviceAPI) : m_deviceAPI->addThreadedSource(m_threadedChannelizer); m_deviceAPI->addChannelAPI(this); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); } @@ -528,6 +529,7 @@ void SSBMod::start() << " m_inputFrequencyOffset: " << m_settings.m_inputFrequencyOffset; m_audioFifo.clear(); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); } void SSBMod::stop() @@ -645,7 +647,7 @@ void SSBMod::seekFileStream(int seekPercentage) } } -void SSBMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset) +void SSBMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force) { qDebug() << "SSBMod::applyChannelSettings:" << " basebandSampleRate: " << basebandSampleRate @@ -653,14 +655,14 @@ void SSBMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, << " inputFrequencyOffset: " << inputFrequencyOffset; if ((inputFrequencyOffset != m_inputFrequencyOffset) || - (outputSampleRate != m_outputSampleRate)) + (outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_carrierNco.setFreq(inputFrequencyOffset, outputSampleRate); m_settingsMutex.unlock(); } - if (outputSampleRate != m_outputSampleRate) + if ((outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_interpolatorDistanceRemain = 0; diff --git a/plugins/channeltx/modssb/ssbmod.h b/plugins/channeltx/modssb/ssbmod.h index e5a1db10e..79c2fe620 100644 --- a/plugins/channeltx/modssb/ssbmod.h +++ b/plugins/channeltx/modssb/ssbmod.h @@ -327,7 +327,7 @@ private: static const int m_levelNbSamples; - void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset); + void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false); void applySettings(const SSBModSettings& settings, bool force = false); void pullAF(Complex& sample); void calculateLevel(Complex& sample); diff --git a/plugins/channeltx/modwfm/wfmmod.cpp b/plugins/channeltx/modwfm/wfmmod.cpp index aa33fd0ef..3801a255f 100644 --- a/plugins/channeltx/modwfm/wfmmod.cpp +++ b/plugins/channeltx/modwfm/wfmmod.cpp @@ -92,6 +92,7 @@ WFMMod::WFMMod(DeviceSinkAPI *deviceAPI) : m_deviceAPI->addThreadedSource(m_threadedChannelizer); m_deviceAPI->addChannelAPI(this); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); } @@ -282,6 +283,7 @@ void WFMMod::start() << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; m_audioFifo.clear(); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); } void WFMMod::stop() @@ -402,7 +404,7 @@ void WFMMod::seekFileStream(int seekPercentage) } } -void WFMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset) +void WFMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force) { qDebug() << "WFMMod::applyChannelSettings:" << " basebandSampleRate: " << basebandSampleRate @@ -410,14 +412,14 @@ void WFMMod::applyChannelSettings(int basebandSampleRate, int outputSampleRate, << " inputFrequencyOffset: " << inputFrequencyOffset; if ((inputFrequencyOffset != m_inputFrequencyOffset) || - (outputSampleRate != m_outputSampleRate)) + (outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_carrierNco.setFreq(inputFrequencyOffset, outputSampleRate); m_settingsMutex.unlock(); } - if (outputSampleRate != m_outputSampleRate) + if ((outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_interpolatorDistanceRemain = 0; diff --git a/plugins/channeltx/modwfm/wfmmod.h b/plugins/channeltx/modwfm/wfmmod.h index 37c8cbffd..baf6e08a1 100644 --- a/plugins/channeltx/modwfm/wfmmod.h +++ b/plugins/channeltx/modwfm/wfmmod.h @@ -317,7 +317,7 @@ private: CWKeyer m_cwKeyer; static const int m_levelNbSamples; - void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset); + void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false); void applySettings(const WFMModSettings& settings, bool force = false); void pullAF(Complex& sample); void calculateLevel(const Real& sample); diff --git a/plugins/channeltx/udpsink/udpsink.cpp b/plugins/channeltx/udpsink/udpsink.cpp index 2814bb0b4..889376930 100644 --- a/plugins/channeltx/udpsink/udpsink.cpp +++ b/plugins/channeltx/udpsink/udpsink.cpp @@ -71,6 +71,7 @@ UDPSink::UDPSink(DeviceSinkAPI *deviceAPI) : m_deviceAPI->addThreadedSource(m_threadedChannelizer); m_deviceAPI->addChannelAPI(this); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); applySettings(m_settings, true); } @@ -87,6 +88,7 @@ UDPSink::~UDPSink() void UDPSink::start() { m_udpHandler.start(); + applyChannelSettings(m_basebandSampleRate, m_outputSampleRate, m_inputFrequencyOffset, true); } void UDPSink::stop() @@ -439,7 +441,7 @@ void UDPSink::resetReadIndex() getInputMessageQueue()->push(cmd); } -void UDPSink::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset) +void UDPSink::applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force) { qDebug() << "UDPSink::applyChannelSettings:" << " basebandSampleRate: " << basebandSampleRate @@ -447,14 +449,14 @@ void UDPSink::applyChannelSettings(int basebandSampleRate, int outputSampleRate, << " inputFrequencyOffset: " << inputFrequencyOffset; if ((inputFrequencyOffset != m_inputFrequencyOffset) || - (outputSampleRate != m_outputSampleRate)) + (outputSampleRate != m_outputSampleRate) || force) { m_settingsMutex.lock(); m_carrierNco.setFreq(inputFrequencyOffset, outputSampleRate); m_settingsMutex.unlock(); } - if ((outputSampleRate != m_outputSampleRate) && (!m_settings.m_autoRWBalance)) + if (((outputSampleRate != m_outputSampleRate) && (!m_settings.m_autoRWBalance)) || force) { m_settingsMutex.lock(); m_interpolatorDistanceRemain = 0; diff --git a/plugins/channeltx/udpsink/udpsink.h b/plugins/channeltx/udpsink/udpsink.h index 52f3d9f3f..910936b33 100644 --- a/plugins/channeltx/udpsink/udpsink.h +++ b/plugins/channeltx/udpsink/udpsink.h @@ -219,7 +219,7 @@ private: static const int m_sampleRateAverageItems = 17; static const int m_ssbFftLen = 1024; - void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset); + void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false); void applySettings(const UDPSinkSettings& settings, bool force = false); void modulateSample(); void calculateLevel(Real sample);