From 2294fce2e842a28ad071a8b7d4f196c5d9adcb68 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 4 Sep 2016 01:06:10 +0200 Subject: [PATCH] DSD demod plugin: activate dual TDMA slot audio handling --- plugins/channel/demoddsd/dsddecoder.h | 8 +++ plugins/channel/demoddsd/dsddemod.cpp | 89 ++++++++++++++++++++----- plugins/channel/demoddsd/dsddemod.h | 3 +- plugins/channel/demoddsd/dsddemodgui.ui | 4 +- 4 files changed, 85 insertions(+), 19 deletions(-) diff --git a/plugins/channel/demoddsd/dsddecoder.h b/plugins/channel/demoddsd/dsddecoder.h index 428c7b26e..6959e7908 100644 --- a/plugins/channel/demoddsd/dsddecoder.h +++ b/plugins/channel/demoddsd/dsddecoder.h @@ -31,13 +31,21 @@ public: void pushSample(short sample) { m_decoder.run(sample); } short getFilteredSample() const { return m_decoder.getFilteredSample(); } short getSymbolSyncSample() const { return m_decoder.getSymbolSyncSample(); } + short *getAudio1(int& nbSamples) { return m_decoder.getAudio1(nbSamples); } void resetAudio1() { m_decoder.resetAudio1(); } + short *getAudio2(int& nbSamples) { return m_decoder.getAudio2(nbSamples); } + void resetAudio2() { m_decoder.resetAudio2(); } + void enableMbelib(bool enable) { m_decoder.enableMbelib(enable); } bool mbeDVReady1() const { return m_decoder.mbeDVReady1(); } void resetMbeDV1() { m_decoder.resetMbeDV1(); } + bool mbeDVReady2() const { return m_decoder.mbeDVReady2(); } + void resetMbeDV2() { m_decoder.resetMbeDV2(); } const unsigned char *getMbeDVFrame1() const { return m_decoder.getMbeDVFrame1(); } + const unsigned char *getMbeDVFrame2() const { return m_decoder.getMbeDVFrame2(); } + int getMbeRateIndex() const { return (int) m_decoder.getMbeRate(); } int getInLevel() const { return m_decoder.getInLevel(); } diff --git a/plugins/channel/demoddsd/dsddemod.cpp b/plugins/channel/demoddsd/dsddemod.cpp index d606ca077..384504edf 100644 --- a/plugins/channel/demoddsd/dsddemod.cpp +++ b/plugins/channel/demoddsd/dsddemod.cpp @@ -34,7 +34,8 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) : m_sampleCount(0), m_squelchCount(0), m_squelchOpen(false), - m_audioFifo(4, 48000), + m_audioFifo1(4, 48000), + m_audioFifo2(4, 48000), m_fmExcursion(24), m_settingsMutex(QMutex::Recursive), m_scope(sampleSink), @@ -66,13 +67,15 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) : m_movingAverage.resize(50, 0); - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->addAudioSink(&m_audioFifo1); + DSPEngine::instance()->addAudioSink(&m_audioFifo2); } DSDDemod::~DSDDemod() { delete[] m_sampleBuffer; - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->removeAudioSink(&m_audioFifo1); + DSPEngine::instance()->removeAudioSink(&m_audioFifo2); } void DSDDemod::configure(MessageQueue* messageQueue, @@ -192,31 +195,84 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto m_scopeSampleBuffer.push_back(s); } - if (DSPEngine::instance()->hasDVSerialSupport() && m_dsdDecoder.mbeDVReady1()) + if (DSPEngine::instance()->hasDVSerialSupport()) { - if (!m_running.m_audioMute) { - DSPEngine::instance()->pushMbeFrame(m_dsdDecoder.getMbeDVFrame1(), m_dsdDecoder.getMbeRateIndex(), m_running.m_volume, &m_audioFifo); + if ((m_running.m_slot1On) && m_dsdDecoder.mbeDVReady1()) + { + if (!m_running.m_audioMute) { + DSPEngine::instance()->pushMbeFrame(m_dsdDecoder.getMbeDVFrame1(), m_dsdDecoder.getMbeRateIndex(), m_running.m_volume, &m_audioFifo1); + } + + m_dsdDecoder.resetMbeDV1(); + } + + if ((m_running.m_slot2On) && m_dsdDecoder.mbeDVReady2()) + { + if (!m_running.m_audioMute) { + DSPEngine::instance()->pushMbeFrame(m_dsdDecoder.getMbeDVFrame2(), m_dsdDecoder.getMbeRateIndex(), m_running.m_volume, &m_audioFifo2); + } + + m_dsdDecoder.resetMbeDV2(); } - m_dsdDecoder.resetMbeDV1(); } +// if (DSPEngine::instance()->hasDVSerialSupport() && m_dsdDecoder.mbeDVReady1()) +// { +// if (!m_running.m_audioMute) +// { +// DSPEngine::instance()->pushMbeFrame(m_dsdDecoder.getMbeDVFrame1(), m_dsdDecoder.getMbeRateIndex(), m_running.m_volume, &m_audioFifo1); +// } +// +// m_dsdDecoder.resetMbeDV1(); +// } + m_interpolatorDistanceRemain += m_interpolatorDistance; } } if (!DSPEngine::instance()->hasDVSerialSupport()) { - int nbAudioSamples; - short *dsdAudio = m_dsdDecoder.getAudio1(nbAudioSamples); - - if (nbAudioSamples > 0) + if (m_running.m_slot1On) { - if (!m_running.m_audioMute) { - uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10); - } + int nbAudioSamples; + short *dsdAudio = m_dsdDecoder.getAudio1(nbAudioSamples); - m_dsdDecoder.resetAudio1(); + if (nbAudioSamples > 0) + { + if (!m_running.m_audioMute) { + uint res = m_audioFifo1.write((const quint8*) dsdAudio, nbAudioSamples, 10); + } + + m_dsdDecoder.resetAudio1(); + } } + + if (m_running.m_slot2On) + { + int nbAudioSamples; + short *dsdAudio = m_dsdDecoder.getAudio2(nbAudioSamples); + + if (nbAudioSamples > 0) + { + if (!m_running.m_audioMute) { + uint res = m_audioFifo2.write((const quint8*) dsdAudio, nbAudioSamples, 10); + } + + m_dsdDecoder.resetAudio2(); + } + } + +// int nbAudioSamples; +// short *dsdAudio = m_dsdDecoder.getAudio1(nbAudioSamples); +// +// if (nbAudioSamples > 0) +// { +// if (!m_running.m_audioMute) { +// uint res = m_audioFifo1.write((const quint8*) dsdAudio, nbAudioSamples, 10); +// } +// +// m_dsdDecoder.resetAudio1(); +// } } @@ -230,7 +286,8 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto void DSDDemod::start() { - m_audioFifo.clear(); + m_audioFifo1.clear(); + m_audioFifo2.clear(); m_phaseDiscri.reset(); } diff --git a/plugins/channel/demoddsd/dsddemod.h b/plugins/channel/demoddsd/dsddemod.h index 38b3e576b..4afb90feb 100644 --- a/plugins/channel/demoddsd/dsddemod.h +++ b/plugins/channel/demoddsd/dsddemod.h @@ -228,7 +228,8 @@ private: qint16 *m_sampleBuffer; //!< samples ring buffer int m_sampleBufferIndex; - AudioFifo m_audioFifo; + AudioFifo m_audioFifo1; + AudioFifo m_audioFifo2; SampleSink* m_scope; bool m_scopeEnabled; diff --git a/plugins/channel/demoddsd/dsddemodgui.ui b/plugins/channel/demoddsd/dsddemodgui.ui index 912c55745..fbad9da29 100644 --- a/plugins/channel/demoddsd/dsddemodgui.ui +++ b/plugins/channel/demoddsd/dsddemodgui.ui @@ -712,7 +712,7 @@ - Mute/Unmute audio + Mute/Unmute audio (all slots) ... @@ -784,7 +784,7 @@ - TDMA slot1 voice on/off + TDMA slot1 or FDMA unique slot voice on/off