1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-04 22:27:53 -04:00

DSD demod: direct call to AMBE feature handle message method

This commit is contained in:
f4exb 2022-05-24 15:30:53 +02:00
parent 1d72798d42
commit 713e0299ab
4 changed files with 33 additions and 46 deletions

View File

@ -319,13 +319,13 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force)
for (const auto& feature : m_availableAMBEFeatures) for (const auto& feature : m_availableAMBEFeatures)
{ {
if (feature.m_featureIndex == settings.m_ambeFeatureIndex) { if (feature.m_featureIndex == settings.m_ambeFeatureIndex) {
m_basebandSink->setAMBEFeatureMessageQueue(feature.m_feature->getInputMessageQueue()); m_basebandSink->setAMBEFeature(feature.m_feature);
} }
} }
} }
else 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}; m_availableAMBEFeatures[feature] = DSDDemodSettings::AvailableAMBEFeature{feature->getIndexInFeatureSet(), feature};
if (m_settings.m_connectAMBE && (m_settings.m_ambeFeatureIndex == feature->getIndexInFeatureSet())) { if (m_settings.m_connectAMBE && (m_settings.m_ambeFeatureIndex == feature->getIndexInFeatureSet())) {
m_basebandSink->setAMBEFeatureMessageQueue(feature->getInputMessageQueue()); m_basebandSink->setAMBEFeature(feature);
} }
notifyUpdateAMBEFeatures(); notifyUpdateAMBEFeatures();
@ -898,7 +898,7 @@ void DSDDemod::handleFeatureRemoved(int featureSetIndex, Feature *feature)
if (m_settings.m_ambeFeatureIndex == m_availableAMBEFeatures[feature].m_featureIndex) if (m_settings.m_ambeFeatureIndex == m_availableAMBEFeatures[feature].m_featureIndex)
{ {
m_settings.m_connectAMBE = false; m_settings.m_connectAMBE = false;
m_basebandSink->setAMBEFeatureMessageQueue(nullptr); m_basebandSink->setAMBEFeature(nullptr);
} }
m_availableAMBEFeatures.remove(feature); m_availableAMBEFeatures.remove(feature);

View File

@ -29,6 +29,7 @@
class DownChannelizer; class DownChannelizer;
class ChannelAPI; class ChannelAPI;
class Feature;
class DSDDemodBaseband : public QObject class DSDDemodBaseband : public QObject
{ {
@ -75,7 +76,7 @@ public:
void setChannel(ChannelAPI *channel); void setChannel(ChannelAPI *channel);
void setFifoLabel(const QString& label) { m_sampleFifo.setLabel(label); } void setFifoLabel(const QString& label) { m_sampleFifo.setLabel(label); }
void setAudioFifoLabel(const QString& label) { m_sink.setAudioFifoLabel(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: private:
SampleSinkFifo m_sampleFifo; SampleSinkFifo m_sampleFifo;

View File

@ -35,6 +35,7 @@
#include "dsp/basebandsamplesink.h" #include "dsp/basebandsamplesink.h"
#include "dsp/datafifo.h" #include "dsp/datafifo.h"
#include "dsp/dspcommands.h" #include "dsp/dspcommands.h"
#include "feature/feature.h"
#include "audio/audiooutputdevice.h" #include "audio/audiooutputdevice.h"
#include "util/db.h" #include "util/db.h"
#include "util/messagequeue.h" #include "util/messagequeue.h"
@ -45,7 +46,7 @@
DSDDemodSink::DSDDemodSink() : DSDDemodSink::DSDDemodSink() :
m_channelSampleRate(48000), m_channelSampleRate(48000),
m_channelFrequencyOffset(0), m_channelFrequencyOffset(0),
m_ambeFeatureMessageQueue(nullptr), m_ambeFeature(nullptr),
m_audioSampleRate(48000), m_audioSampleRate(48000),
m_interpolatorDistance(0.0f), m_interpolatorDistance(0.0f),
m_interpolatorDistanceRemain(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 (DSPEngine::instance()->hasDVSerialSupport())
if (m_ambeFeatureMessageQueue) if (m_ambeFeature)
{ {
if ((m_settings.m_slot1On) && m_dsdDecoder.mbeDVReady1()) if ((m_settings.m_slot1On) && m_dsdDecoder.mbeDVReady1())
{ {
if (!m_settings.m_audioMute) if (!m_settings.m_audioMute)
{ {
m_ambeFeatureMessageQueue->push( DSPPushMbeFrame *msg = new DSPPushMbeFrame(
new DSPPushMbeFrame( m_dsdDecoder.getMbeDVFrame1(),
m_dsdDecoder.getMbeDVFrame1(), m_dsdDecoder.getMbeRateIndex(),
m_dsdDecoder.getMbeRateIndex(), m_settings.m_volume * 10.0,
m_settings.m_volume * 10.0, m_settings.m_tdmaStereo ? 1 : 3, // left or both channels
m_settings.m_tdmaStereo ? 1 : 3, // left or both channels m_settings.m_highPassFilter,
m_settings.m_highPassFilter, m_audioSampleRate/8000, // upsample from native 8k
m_audioSampleRate/8000, // upsample from native 8k &m_audioFifo1
&m_audioFifo1
)
); );
// DSPEngine::instance()->pushMbeFrame( m_ambeFeature->handleMessage(*msg);
// m_dsdDecoder.getMbeDVFrame1(), delete msg;
// 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_dsdDecoder.resetMbeDV1(); m_dsdDecoder.resetMbeDV1();
@ -266,25 +259,17 @@ void DSDDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV
{ {
if (!m_settings.m_audioMute) if (!m_settings.m_audioMute)
{ {
m_ambeFeatureMessageQueue->push( DSPPushMbeFrame *msg = new DSPPushMbeFrame(
new DSPPushMbeFrame( m_dsdDecoder.getMbeDVFrame2(),
m_dsdDecoder.getMbeDVFrame2(), m_dsdDecoder.getMbeRateIndex(),
m_dsdDecoder.getMbeRateIndex(), m_settings.m_volume * 10.0,
m_settings.m_volume * 10.0, m_settings.m_tdmaStereo ? 2 : 3, // right or both channels
m_settings.m_tdmaStereo ? 2 : 3, // right or both channels m_settings.m_highPassFilter,
m_settings.m_highPassFilter, m_audioSampleRate/8000, // upsample from native 8k
m_audioSampleRate/8000, // upsample from native 8k &m_audioFifo2
&m_audioFifo2
)
); );
// DSPEngine::instance()->pushMbeFrame( m_ambeFeature->handleMessage(*msg);
// m_dsdDecoder.getMbeDVFrame2(), delete msg;
// 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_dsdDecoder.resetMbeDV2(); 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 (!DSPEngine::instance()->hasDVSerialSupport())
{ {
if (m_settings.m_slot1On) if (m_settings.m_slot1On)

View File

@ -36,6 +36,7 @@
class BasebandSampleSink; class BasebandSampleSink;
class ChannelAPI; class ChannelAPI;
class Feature;
class DSDDemodSink : public ChannelSampleSink { class DSDDemodSink : public ChannelSampleSink {
public: public:
@ -83,7 +84,7 @@ public:
} }
const char *updateAndGetStatusText(); const char *updateAndGetStatusText();
void setAmbeFeatureMessageQueue(MessageQueue *queue) { m_ambeFeatureMessageQueue = queue; } void setAmbeFeature(Feature *feature) { m_ambeFeature = feature; }
private: private:
struct MagSqLevelsStore struct MagSqLevelsStore
@ -115,7 +116,7 @@ private:
int m_channelFrequencyOffset; int m_channelFrequencyOffset;
DSDDemodSettings m_settings; DSDDemodSettings m_settings;
ChannelAPI *m_channel; ChannelAPI *m_channel;
MessageQueue *m_ambeFeatureMessageQueue; Feature *m_ambeFeature;
int m_audioSampleRate; int m_audioSampleRate;
QVector<qint16> m_demodBuffer; QVector<qint16> m_demodBuffer;
int m_demodBufferFill; int m_demodBufferFill;