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)
{
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);

View File

@ -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;

View File

@ -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)

View File

@ -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<qint16> m_demodBuffer;
int m_demodBufferFill;