1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-14 23:43:43 -04:00

DSD demod plugin: integration with new DSDplus library

This commit is contained in:
f4exb
2016-04-11 02:48:12 +02:00
parent 44f608d7be
commit 7412a47ba2
15 changed files with 184 additions and 132 deletions
+2 -11
View File
@@ -50,19 +50,10 @@ DSDDecoder::DSDDecoder()
dsdstate->rf_mod = 0;
dsdstate->output_offset = 0;
m_zeroBuffer = new short[1<<18]; // 128 kS
memset(m_zeroBuffer, 0, sizeof(short) * (1<<18));
dsdopts->upsample = 1;
dsdopts->stereo = 1;
}
DSDDecoder::~DSDDecoder()
{
}
void DSDDecoder::pushSamples(const short *samples,int nbSamples)
{
}
void DSDDecoder::popAudioSamples(AudioFifo *audioFifo, bool audioMute)
{
}
+3 -3
View File
@@ -28,12 +28,12 @@ public:
DSDDecoder();
~DSDDecoder();
void pushSamples(const short *samples, int nbSamples); // Push this amount of samples to the DSD decoder thread
void popAudioSamples(AudioFifo *audioFifo, bool audioMute);
void pushSample(short sample) { m_decoder.run(sample); }
short *getAudio(int& nbSamples) { return m_decoder.getAudio(nbSamples); }
void resetAudio() { m_decoder.resetAudio(); }
private:
DSDplus::DSDDecoder m_decoder;
short *m_zeroBuffer;
};
#endif /* PLUGINS_CHANNEL_DEMODDSD_DSDDECODER_H_ */
+13 -7
View File
@@ -43,8 +43,6 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) :
{
setObjectName("DSDDemod");
m_samplesBuffer = new qint16[1<<18]; // 128 k Samples is the maximum size of all input devices sample buffers (Airspy or HackRF) = 2^(17+1) for 2 byte samples
m_config.m_inputSampleRate = 96000;
m_config.m_inputFrequencyOffset = 0;
m_config.m_rfBandwidth = 100;
@@ -69,7 +67,6 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) :
DSDDemod::~DSDDemod()
{
DSPEngine::instance()->removeAudioSink(&m_audioFifo);
delete[] m_samplesBuffer;
}
void DSDDemod::configure(MessageQueue* messageQueue,
@@ -96,7 +93,6 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
Complex ci;
m_settingsMutex.lock();
m_samplesBufferIndex = 0;
m_scopeSampleBuffer.clear();
for (SampleVector::const_iterator it = begin; it != end; ++it)
@@ -141,7 +137,7 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
Sample s(sample, 0.0);
m_scopeSampleBuffer.push_back(s);
m_samplesBuffer[m_samplesBufferIndex++] = sample;
m_dsdDecoder.pushSample(sample);
// if (m_running.m_audioMute)
// {
@@ -185,8 +181,18 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
// m_audioBufferFill = 0;
// }
m_dsdDecoder.popAudioSamples(&m_audioFifo, m_running.m_audioMute);
m_dsdDecoder.pushSamples(m_samplesBuffer, m_samplesBufferIndex);
int nbAudioSamples;
short *audio = m_dsdDecoder.getAudio(nbAudioSamples);
if (nbAudioSamples > 0)
{
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], nbAudioSamples, 10);
if (res != nbAudioSamples)
{
qDebug("NFMDemod::feed: %u/%u tail samples written", res, nbAudioSamples);
}
}
if ((m_scope != 0) && (m_scopeEnabled))
{
-2
View File
@@ -169,8 +169,6 @@ private:
Real m_fmExcursion;
qint16 *m_samplesBuffer; //!< Input buffer for DSD decoder process
int m_samplesBufferIndex;
SampleVector m_scopeSampleBuffer;
AudioVector m_audioBuffer;
uint m_audioBufferFill;