mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-23 08:28:36 -05:00
DSD demod plugin: activate dual TDMA slot audio handling
This commit is contained in:
parent
409a4e2292
commit
2294fce2e8
@ -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(); }
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -712,7 +712,7 @@
|
||||
<item>
|
||||
<widget class="QToolButton" name="audioMute">
|
||||
<property name="toolTip">
|
||||
<string>Mute/Unmute audio</string>
|
||||
<string>Mute/Unmute audio (all slots)</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
@ -784,7 +784,7 @@
|
||||
<item>
|
||||
<widget class="QToolButton" name="slot1On">
|
||||
<property name="toolTip">
|
||||
<string>TDMA slot1 voice on/off</string>
|
||||
<string>TDMA slot1 or FDMA unique slot voice on/off</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
|
Loading…
Reference in New Issue
Block a user