diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index 980786713..e2fc815db 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -319,13 +319,13 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force) for (const auto& feature : m_availableAMBEFeatures) { if (feature.m_featureIndex == settings.m_ambeFeatureIndex) { - m_basebandSink->setAMBEFeatureMessageQueue(feature.m_feature->getInputMessageQueue()); + m_basebandSink->setAMBEFeature(feature.m_feature); } } } else { - m_basebandSink->setAMBEFeatureMessageQueue(nullptr); + m_basebandSink->setAMBEFeature(nullptr); } } @@ -880,7 +880,7 @@ void DSDDemod::handleFeatureAdded(int featureSetIndex, Feature *feature) m_availableAMBEFeatures[feature] = DSDDemodSettings::AvailableAMBEFeature{feature->getIndexInFeatureSet(), feature}; if (m_settings.m_connectAMBE && (m_settings.m_ambeFeatureIndex == feature->getIndexInFeatureSet())) { - m_basebandSink->setAMBEFeatureMessageQueue(feature->getInputMessageQueue()); + m_basebandSink->setAMBEFeature(feature); } notifyUpdateAMBEFeatures(); @@ -898,7 +898,7 @@ void DSDDemod::handleFeatureRemoved(int featureSetIndex, Feature *feature) if (m_settings.m_ambeFeatureIndex == m_availableAMBEFeatures[feature].m_featureIndex) { m_settings.m_connectAMBE = false; - m_basebandSink->setAMBEFeatureMessageQueue(nullptr); + m_basebandSink->setAMBEFeature(nullptr); } m_availableAMBEFeatures.remove(feature); diff --git a/plugins/channelrx/demoddsd/dsddemodbaseband.h b/plugins/channelrx/demoddsd/dsddemodbaseband.h index e96df9e97..7f11382c6 100644 --- a/plugins/channelrx/demoddsd/dsddemodbaseband.h +++ b/plugins/channelrx/demoddsd/dsddemodbaseband.h @@ -29,6 +29,7 @@ class DownChannelizer; class ChannelAPI; +class Feature; class DSDDemodBaseband : public QObject { @@ -75,7 +76,7 @@ public: void setChannel(ChannelAPI *channel); void setFifoLabel(const QString& label) { m_sampleFifo.setLabel(label); } void setAudioFifoLabel(const QString& label) { m_sink.setAudioFifoLabel(label); } - void setAMBEFeatureMessageQueue(MessageQueue *ambeFeatureMessageQueue) { m_sink.setAmbeFeatureMessageQueue(ambeFeatureMessageQueue); } + void setAMBEFeature(Feature *ambeFeature) { m_sink.setAmbeFeature(ambeFeature); } private: SampleSinkFifo m_sampleFifo; diff --git a/plugins/channelrx/demoddsd/dsddemodsink.cpp b/plugins/channelrx/demoddsd/dsddemodsink.cpp index e91af3932..29a0a7ba9 100644 --- a/plugins/channelrx/demoddsd/dsddemodsink.cpp +++ b/plugins/channelrx/demoddsd/dsddemodsink.cpp @@ -35,6 +35,7 @@ #include "dsp/basebandsamplesink.h" #include "dsp/datafifo.h" #include "dsp/dspcommands.h" +#include "feature/feature.h" #include "audio/audiooutputdevice.h" #include "util/db.h" #include "util/messagequeue.h" @@ -45,7 +46,7 @@ DSDDemodSink::DSDDemodSink() : m_channelSampleRate(48000), m_channelFrequencyOffset(0), - m_ambeFeatureMessageQueue(nullptr), + m_ambeFeature(nullptr), m_audioSampleRate(48000), m_interpolatorDistance(0.0f), m_interpolatorDistanceRemain(0.0f), @@ -232,31 +233,23 @@ void DSDDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV } // if (DSPEngine::instance()->hasDVSerialSupport()) - if (m_ambeFeatureMessageQueue) + if (m_ambeFeature) { if ((m_settings.m_slot1On) && m_dsdDecoder.mbeDVReady1()) { if (!m_settings.m_audioMute) { - m_ambeFeatureMessageQueue->push( - new DSPPushMbeFrame( - m_dsdDecoder.getMbeDVFrame1(), - m_dsdDecoder.getMbeRateIndex(), - m_settings.m_volume * 10.0, - m_settings.m_tdmaStereo ? 1 : 3, // left or both channels - m_settings.m_highPassFilter, - m_audioSampleRate/8000, // upsample from native 8k - &m_audioFifo1 - ) + DSPPushMbeFrame *msg = new DSPPushMbeFrame( + m_dsdDecoder.getMbeDVFrame1(), + m_dsdDecoder.getMbeRateIndex(), + m_settings.m_volume * 10.0, + m_settings.m_tdmaStereo ? 1 : 3, // left or both channels + m_settings.m_highPassFilter, + m_audioSampleRate/8000, // upsample from native 8k + &m_audioFifo1 ); - // DSPEngine::instance()->pushMbeFrame( - // m_dsdDecoder.getMbeDVFrame1(), - // m_dsdDecoder.getMbeRateIndex(), - // m_settings.m_volume * 10.0, - // m_settings.m_tdmaStereo ? 1 : 3, // left or both channels - // m_settings.m_highPassFilter, - // m_audioSampleRate/8000, // upsample from native 8k - // &m_audioFifo1); + m_ambeFeature->handleMessage(*msg); + delete msg; } m_dsdDecoder.resetMbeDV1(); @@ -266,25 +259,17 @@ void DSDDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV { if (!m_settings.m_audioMute) { - m_ambeFeatureMessageQueue->push( - new DSPPushMbeFrame( - m_dsdDecoder.getMbeDVFrame2(), - m_dsdDecoder.getMbeRateIndex(), - m_settings.m_volume * 10.0, - m_settings.m_tdmaStereo ? 2 : 3, // right or both channels - m_settings.m_highPassFilter, - m_audioSampleRate/8000, // upsample from native 8k - &m_audioFifo2 - ) + DSPPushMbeFrame *msg = new DSPPushMbeFrame( + m_dsdDecoder.getMbeDVFrame2(), + m_dsdDecoder.getMbeRateIndex(), + m_settings.m_volume * 10.0, + m_settings.m_tdmaStereo ? 2 : 3, // right or both channels + m_settings.m_highPassFilter, + m_audioSampleRate/8000, // upsample from native 8k + &m_audioFifo2 ); - // DSPEngine::instance()->pushMbeFrame( - // m_dsdDecoder.getMbeDVFrame2(), - // m_dsdDecoder.getMbeRateIndex(), - // m_settings.m_volume * 10.0, - // m_settings.m_tdmaStereo ? 2 : 3, // right or both channels - // m_settings.m_highPassFilter, - // m_audioSampleRate/8000, // upsample from native 8k - // &m_audioFifo2); + m_ambeFeature->handleMessage(*msg); + delete msg; } m_dsdDecoder.resetMbeDV2(); @@ -295,7 +280,7 @@ void DSDDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV } } - if (!m_ambeFeatureMessageQueue) + if (!m_ambeFeature) // if (!DSPEngine::instance()->hasDVSerialSupport()) { if (m_settings.m_slot1On) diff --git a/plugins/channelrx/demoddsd/dsddemodsink.h b/plugins/channelrx/demoddsd/dsddemodsink.h index dd4dbdfc5..5eaa7ec6a 100644 --- a/plugins/channelrx/demoddsd/dsddemodsink.h +++ b/plugins/channelrx/demoddsd/dsddemodsink.h @@ -36,6 +36,7 @@ class BasebandSampleSink; class ChannelAPI; +class Feature; class DSDDemodSink : public ChannelSampleSink { public: @@ -83,7 +84,7 @@ public: } const char *updateAndGetStatusText(); - void setAmbeFeatureMessageQueue(MessageQueue *queue) { m_ambeFeatureMessageQueue = queue; } + void setAmbeFeature(Feature *feature) { m_ambeFeature = feature; } private: struct MagSqLevelsStore @@ -115,7 +116,7 @@ private: int m_channelFrequencyOffset; DSDDemodSettings m_settings; ChannelAPI *m_channel; - MessageQueue *m_ambeFeatureMessageQueue; + Feature *m_ambeFeature; int m_audioSampleRate; QVector m_demodBuffer; int m_demodBufferFill;