mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-07 15:47:50 -04:00
DSD demod plugin: integration with new DSDplus library
This commit is contained in:
parent
44f608d7be
commit
7412a47ba2
@ -2,6 +2,7 @@ project(dsdplus)
|
|||||||
|
|
||||||
set(dsdplus_SOURCES
|
set(dsdplus_SOURCES
|
||||||
descramble.cpp
|
descramble.cpp
|
||||||
|
dmr_data.cpp
|
||||||
dmr_voice.cpp
|
dmr_voice.cpp
|
||||||
dsd_decoder.cpp
|
dsd_decoder.cpp
|
||||||
dsd_filters.cpp
|
dsd_filters.cpp
|
||||||
@ -13,6 +14,7 @@ set(dsdplus_SOURCES
|
|||||||
|
|
||||||
set(dsdplus_HEADERS
|
set(dsdplus_HEADERS
|
||||||
descramble.h
|
descramble.h
|
||||||
|
dmr_data.h
|
||||||
dmr_voice.h
|
dmr_voice.h
|
||||||
dsd_decoder.h
|
dsd_decoder.h
|
||||||
dsd_filters.h
|
dsd_filters.h
|
||||||
|
@ -212,7 +212,7 @@ void DSDDMRData::preProcess()
|
|||||||
|
|
||||||
if (m_dsdDecoder->m_opts.errorbars == 1)
|
if (m_dsdDecoder->m_opts.errorbars == 1)
|
||||||
{
|
{
|
||||||
fprintf(m_dsdDecoder->m_state.logfile, "%s %s ", m_dsdDecoder->m_state.slot0light, m_dsdDecoder->m_state.slot1light);
|
fprintf(stderr, "%s %s ", m_dsdDecoder->m_state.slot0light, m_dsdDecoder->m_state.slot1light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ void DSDDMRVoice::processSlot4(int symbolIndex) // Slot4 is a 24 symbol slot
|
|||||||
|
|
||||||
if ((m_majorBlock == 0) && (m_dsdDecoder->m_opts.errorbars == 1))
|
if ((m_majorBlock == 0) && (m_dsdDecoder->m_opts.errorbars == 1))
|
||||||
{
|
{
|
||||||
fprintf(m_dsdDecoder->m_state.logfile, "%s %s VOICE e:", m_dsdDecoder->m_state.slot0light, m_dsdDecoder->m_state.slot1light);
|
fprintf(stderr, "%s %s VOICE e:", m_dsdDecoder->m_state.slot0light, m_dsdDecoder->m_state.slot1light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,12 +32,11 @@ DSDDecoder::DSDDecoder() :
|
|||||||
resetSymbol();
|
resetSymbol();
|
||||||
resetFrameSync();
|
resetFrameSync();
|
||||||
noCarrier();
|
noCarrier();
|
||||||
m_state.logfile = fdopen(fileno(stderr), (const char *) 'w');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DSDDecoder::~DSDDecoder()
|
DSDDecoder::~DSDDecoder()
|
||||||
{
|
{
|
||||||
fclose(m_state.logfile);
|
fclose(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSDDecoder::run(short sample)
|
void DSDDecoder::run(short sample)
|
||||||
@ -196,7 +195,7 @@ bool DSDDecoder::pushSample(short sample, int have_sync)
|
|||||||
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
||||||
&& (m_state.lastsynctype != -1))
|
&& (m_state.lastsynctype != -1))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "O");
|
fprintf(stderr, "O");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -204,7 +203,7 @@ bool DSDDecoder::pushSample(short sample, int have_sync)
|
|||||||
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
||||||
&& (m_state.lastsynctype != -1))
|
&& (m_state.lastsynctype != -1))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "+");
|
fprintf(stderr, "+");
|
||||||
}
|
}
|
||||||
if ((m_state.jitter < 0)
|
if ((m_state.jitter < 0)
|
||||||
&& (m_state.lastsample < m_state.center)
|
&& (m_state.lastsample < m_state.center)
|
||||||
@ -233,7 +232,7 @@ bool DSDDecoder::pushSample(short sample, int have_sync)
|
|||||||
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
||||||
&& (m_state.lastsynctype != -1))
|
&& (m_state.lastsynctype != -1))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "X");
|
fprintf(stderr, "X");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -241,7 +240,7 @@ bool DSDDecoder::pushSample(short sample, int have_sync)
|
|||||||
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
if ((m_opts.symboltiming == 1) && (have_sync == 0)
|
||||||
&& (m_state.lastsynctype != -1))
|
&& (m_state.lastsynctype != -1))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "-");
|
fprintf(stderr, "-");
|
||||||
}
|
}
|
||||||
if ((m_state.jitter < 0)
|
if ((m_state.jitter < 0)
|
||||||
&& (m_state.lastsample > m_state.center)
|
&& (m_state.lastsample > m_state.center)
|
||||||
@ -291,11 +290,11 @@ bool DSDDecoder::pushSample(short sample, int have_sync)
|
|||||||
{
|
{
|
||||||
if (m_state.jitter >= 0)
|
if (m_state.jitter >= 0)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, " %i\n", m_state.jitter);
|
fprintf(stderr, " %i\n", m_state.jitter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,25 +406,25 @@ int DSDDecoder::getDibit()
|
|||||||
if (m_state.symbolcnt > (4800 / m_opts.scoperate))
|
if (m_state.symbolcnt > (4800 / m_opts.scoperate))
|
||||||
{
|
{
|
||||||
m_state.symbolcnt = 0;
|
m_state.symbolcnt = 0;
|
||||||
fprintf(m_state.logfile, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"Demod mode: %s Nac: %4X\n",
|
"Demod mode: %s Nac: %4X\n",
|
||||||
modulation, m_state.nac);
|
modulation, m_state.nac);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"Frame Type: %s Talkgroup: %7i\n",
|
"Frame Type: %s Talkgroup: %7i\n",
|
||||||
m_state.ftype, m_state.lasttg);
|
m_state.ftype, m_state.lasttg);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"Frame Subtype: %s Source: %12i\n",
|
"Frame Subtype: %s Source: %12i\n",
|
||||||
m_state.fsubtype, m_state.lastsrc);
|
m_state.fsubtype, m_state.lastsrc);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"TDMA activity: %s %s Voice errors: %s\n",
|
"TDMA activity: %s %s Voice errors: %s\n",
|
||||||
m_state.slot0light, m_state.slot1light, m_state.err_str);
|
m_state.slot0light, m_state.slot1light, m_state.err_str);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"+----------------------------------------------------------------+\n");
|
"+----------------------------------------------------------------+\n");
|
||||||
|
|
||||||
for (i = 0; i < 10; i++)
|
for (i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "|");
|
fprintf(stderr, "|");
|
||||||
|
|
||||||
for (j = 0; j < 64; j++)
|
for (j = 0; j < 64; j++)
|
||||||
{
|
{
|
||||||
@ -434,26 +433,26 @@ int DSDDecoder::getDibit()
|
|||||||
if ((j == ((m_state.min) + 32768) / 1024)
|
if ((j == ((m_state.min) + 32768) / 1024)
|
||||||
|| (j == ((m_state.max) + 32768) / 1024))
|
|| (j == ((m_state.max) + 32768) / 1024))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "#");
|
fprintf(stderr, "#");
|
||||||
}
|
}
|
||||||
else if ((j == ((m_state.lmid) + 32768) / 1024)
|
else if ((j == ((m_state.lmid) + 32768) / 1024)
|
||||||
|| (j == ((m_state.umid) + 32768) / 1024))
|
|| (j == ((m_state.umid) + 32768) / 1024))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "^");
|
fprintf(stderr, "^");
|
||||||
}
|
}
|
||||||
else if (j == (m_state.center + 32768) / 1024)
|
else if (j == (m_state.center + 32768) / 1024)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "!");
|
fprintf(stderr, "!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (j == 32)
|
if (j == 32)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "|");
|
fprintf(stderr, "|");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, " ");
|
fprintf(stderr, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -461,24 +460,24 @@ int DSDDecoder::getDibit()
|
|||||||
{
|
{
|
||||||
if (spectrum[j] > 9 - i)
|
if (spectrum[j] > 9 - i)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "*");
|
fprintf(stderr, "*");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (j == 32)
|
if (j == 32)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "|");
|
fprintf(stderr, "|");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, " ");
|
fprintf(stderr, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf(m_state.logfile, "|\n");
|
fprintf(stderr, "|\n");
|
||||||
}
|
}
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"+----------------------------------------------------------------+\n");
|
"+----------------------------------------------------------------+\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -620,7 +619,7 @@ void DSDDecoder::resetFrameSync()
|
|||||||
|
|
||||||
if ((m_opts.symboltiming == 1) && (m_state.carrier == 1))
|
if ((m_opts.symboltiming == 1) && (m_state.carrier == 1))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "\nSymbol Timing:\n");
|
fprintf(stderr, "\nSymbol Timing:\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_fsmState = DSDLookForSync;
|
m_fsmState = DSDLookForSync;
|
||||||
@ -630,19 +629,19 @@ void DSDDecoder::printFrameSync(const char *frametype, int offset, char *modulat
|
|||||||
{
|
{
|
||||||
if (m_opts.verbose > 0)
|
if (m_opts.verbose > 0)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "Sync: %s ", frametype);
|
fprintf(stderr, "\nSync: %s ", frametype);
|
||||||
}
|
}
|
||||||
if (m_opts.verbose > 2)
|
if (m_opts.verbose > 2)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "o: %4i ", offset);
|
fprintf(stderr, "o: %4i ", offset);
|
||||||
}
|
}
|
||||||
if (m_opts.verbose > 1)
|
if (m_opts.verbose > 1)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "mod: %s ", modulation);
|
fprintf(stderr, "mod: %s ", modulation);
|
||||||
}
|
}
|
||||||
if (m_opts.verbose > 2)
|
if (m_opts.verbose > 2)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "g: %f ", m_state.aout_gain);
|
fprintf(stderr, "g: %f ", m_state.aout_gain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,26 +833,26 @@ int DSDDecoder::getFrameSync()
|
|||||||
{
|
{
|
||||||
m_state.symbolcnt = 0;
|
m_state.symbolcnt = 0;
|
||||||
|
|
||||||
fprintf(m_state.logfile, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"Demod mode: %s Nac: %4X\n",
|
"Demod mode: %s Nac: %4X\n",
|
||||||
m_modulation, m_state.nac);
|
m_modulation, m_state.nac);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"Frame Type: %s Talkgroup: %7i\n",
|
"Frame Type: %s Talkgroup: %7i\n",
|
||||||
m_state.ftype, m_state.lasttg);
|
m_state.ftype, m_state.lasttg);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"Frame Subtype: %s Source: %12i\n",
|
"Frame Subtype: %s Source: %12i\n",
|
||||||
m_state.fsubtype, m_state.lastsrc);
|
m_state.fsubtype, m_state.lastsrc);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"TDMA activity: %s %s Voice errors: %s\n",
|
"TDMA activity: %s %s Voice errors: %s\n",
|
||||||
m_state.slot0light, m_state.slot1light,
|
m_state.slot0light, m_state.slot1light,
|
||||||
m_state.err_str);
|
m_state.err_str);
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"+----------------------------------------------------------------+\n");
|
"+----------------------------------------------------------------+\n");
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "|");
|
fprintf(stderr, "|");
|
||||||
|
|
||||||
for (int j = 0; j < 64; j++)
|
for (int j = 0; j < 64; j++)
|
||||||
{
|
{
|
||||||
@ -861,21 +860,21 @@ int DSDDecoder::getFrameSync()
|
|||||||
{
|
{
|
||||||
if ((j == ((m_state.min) + 32768) / 1024) || (j == ((m_state.max) + 32768) / 1024))
|
if ((j == ((m_state.min) + 32768) / 1024) || (j == ((m_state.max) + 32768) / 1024))
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "#");
|
fprintf(stderr, "#");
|
||||||
}
|
}
|
||||||
else if (j == (m_state.center + 32768) / 1024)
|
else if (j == (m_state.center + 32768) / 1024)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "!");
|
fprintf(stderr, "!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (j == 32)
|
if (j == 32)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "|");
|
fprintf(stderr, "|");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, " ");
|
fprintf(stderr, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -883,26 +882,26 @@ int DSDDecoder::getFrameSync()
|
|||||||
{
|
{
|
||||||
if (m_spectrum[j] > 9 - i)
|
if (m_spectrum[j] > 9 - i)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "*");
|
fprintf(stderr, "*");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (j == 32)
|
if (j == 32)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "|");
|
fprintf(stderr, "|");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, " ");
|
fprintf(stderr, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(m_state.logfile, "|\n");
|
fprintf(stderr, "|\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(m_state.logfile,
|
fprintf(stderr,
|
||||||
"+----------------------------------------------------------------+\n");
|
"+----------------------------------------------------------------+\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1513,7 +1512,7 @@ int DSDDecoder::getFrameSync()
|
|||||||
if ((m_opts.errorbars == 1) && (m_opts.verbose > 1)
|
if ((m_opts.errorbars == 1) && (m_opts.verbose > 1)
|
||||||
&& (m_state.carrier == 1))
|
&& (m_state.carrier == 1))
|
||||||
{
|
{
|
||||||
printf("Sync: no sync\n");
|
printf("\nSync: no sync\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
noCarrier();
|
noCarrier();
|
||||||
@ -1573,19 +1572,19 @@ void DSDDecoder::printFrameInfo()
|
|||||||
|
|
||||||
if (m_opts.verbose > 0)
|
if (m_opts.verbose > 0)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "inlvl: %2i%% ", level);
|
fprintf(stderr, "inlvl: %2i%% ", level);
|
||||||
}
|
}
|
||||||
if (m_state.nac != 0)
|
if (m_state.nac != 0)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "nac: %4X ", m_state.nac);
|
fprintf(stderr, "nac: %4X ", m_state.nac);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_opts.verbose > 1)
|
if (m_opts.verbose > 1)
|
||||||
{
|
{
|
||||||
fprintf(m_state.logfile, "src: %8i ", m_state.lastsrc);
|
fprintf(stderr, "src: %8i ", m_state.lastsrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(m_state.logfile, "tg: %5i ", m_state.lasttg);
|
fprintf(stderr, "tg: %5i ", m_state.lasttg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DSDDecoder::comp(const void *a, const void *b)
|
int DSDDecoder::comp(const void *a, const void *b)
|
||||||
@ -1622,7 +1621,7 @@ void DSDDecoder::processFrame()
|
|||||||
if (m_opts.verbose > 0)
|
if (m_opts.verbose > 0)
|
||||||
{
|
{
|
||||||
int level = (int) m_state.max / 164;
|
int level = (int) m_state.max / 164;
|
||||||
fprintf(m_state.logfile, "inlvl: %2i%% ", level);
|
fprintf(stderr, "inlvl: %2i%% ", level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1670,7 +1669,7 @@ void DSDDecoder::processFrame()
|
|||||||
if (m_opts.verbose > 0)
|
if (m_opts.verbose > 0)
|
||||||
{
|
{
|
||||||
int level = (int) m_state.max / 164;
|
int level = (int) m_state.max / 164;
|
||||||
fprintf(m_state.logfile, "inlvl: %2i%% ", level);
|
fprintf(stderr, "inlvl: %2i%% ", level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,19 @@ public:
|
|||||||
~DSDDecoder();
|
~DSDDecoder();
|
||||||
|
|
||||||
void run(short sample);
|
void run(short sample);
|
||||||
|
|
||||||
|
short *getAudio(int& nbSamples)
|
||||||
|
{
|
||||||
|
nbSamples = m_state.audio_out_nb_samples;
|
||||||
|
return m_state.audio_out_buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetAudio()
|
||||||
|
{
|
||||||
|
m_state.audio_out_nb_samples = 0;
|
||||||
|
m_state.audio_out_buf_p = m_state.audio_out_buf;
|
||||||
|
}
|
||||||
|
|
||||||
DSDOpts *getOpts() { return &m_opts; }
|
DSDOpts *getOpts() { return &m_opts; }
|
||||||
DSDState *getState() { return &m_state; }
|
DSDState *getState() { return &m_state; }
|
||||||
|
|
||||||
|
@ -16,10 +16,13 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <mbelib.h>
|
|
||||||
#include "dsd_mbe.h"
|
#include "dsd_mbe.h"
|
||||||
#include "dsd_decoder.h"
|
#include "dsd_decoder.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <mbelib.h>
|
||||||
|
}
|
||||||
|
|
||||||
namespace DSDplus
|
namespace DSDplus
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -68,7 +71,7 @@ void DSDMBEDecoder::processFrame(char imbe_fr[8][23], char ambe_fr[4][24], char
|
|||||||
|
|
||||||
if (m_dsdDecoder->m_opts.errorbars == 1)
|
if (m_dsdDecoder->m_opts.errorbars == 1)
|
||||||
{
|
{
|
||||||
fprintf(m_dsdDecoder->m_state.logfile, "%s", m_dsdDecoder->m_state.err_str);
|
fprintf(stderr, "%s", m_dsdDecoder->m_state.err_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
processAudio();
|
processAudio();
|
||||||
@ -179,11 +182,18 @@ void DSDMBEDecoder::processAudio()
|
|||||||
m_dsdDecoder->m_state.aout_gain += ((float) 160 * gaindelta);
|
m_dsdDecoder->m_state.aout_gain += ((float) 160 * gaindelta);
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy audio datat to output buffer and upsample if necessary
|
// copy audio data to output buffer and upsample if necessary
|
||||||
m_dsdDecoder->m_state.audio_out_temp_buf_p = m_dsdDecoder->m_state.audio_out_temp_buf;
|
m_dsdDecoder->m_state.audio_out_temp_buf_p = m_dsdDecoder->m_state.audio_out_temp_buf;
|
||||||
|
|
||||||
if (m_dsdDecoder->m_opts.split == 0)
|
if ((m_dsdDecoder->m_opts.split == 0) || (m_dsdDecoder->m_opts.upsample != 0)) // upsampling to 48k
|
||||||
{
|
{
|
||||||
|
if (m_dsdDecoder->m_state.audio_out_nb_samples + 960 >= m_dsdDecoder->m_state.audio_out_buf_size)
|
||||||
|
{
|
||||||
|
m_dsdDecoder->resetAudio();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_dsdDecoder->m_state.audio_out_float_buf_p = m_dsdDecoder->m_state.audio_out_float_buf;
|
||||||
|
|
||||||
for (n = 0; n < 160; n++)
|
for (n = 0; n < 160; n++)
|
||||||
{
|
{
|
||||||
upsample(*m_dsdDecoder->m_state.audio_out_temp_buf_p);
|
upsample(*m_dsdDecoder->m_state.audio_out_temp_buf_p);
|
||||||
@ -193,7 +203,7 @@ void DSDMBEDecoder::processAudio()
|
|||||||
m_dsdDecoder->m_state.audio_out_idx2 += 6;
|
m_dsdDecoder->m_state.audio_out_idx2 += 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_dsdDecoder->m_state.audio_out_float_buf_p -= (960 + m_dsdDecoder->m_opts.playoffset);
|
m_dsdDecoder->m_state.audio_out_float_buf_p = m_dsdDecoder->m_state.audio_out_float_buf;
|
||||||
|
|
||||||
// copy to output (short) buffer
|
// copy to output (short) buffer
|
||||||
for (n = 0; n < 960; n++)
|
for (n = 0; n < 960; n++)
|
||||||
@ -209,13 +219,26 @@ void DSDMBEDecoder::processAudio()
|
|||||||
|
|
||||||
*m_dsdDecoder->m_state.audio_out_buf_p = (short) *m_dsdDecoder->m_state.audio_out_float_buf_p;
|
*m_dsdDecoder->m_state.audio_out_buf_p = (short) *m_dsdDecoder->m_state.audio_out_float_buf_p;
|
||||||
m_dsdDecoder->m_state.audio_out_buf_p++;
|
m_dsdDecoder->m_state.audio_out_buf_p++;
|
||||||
|
|
||||||
|
if (m_dsdDecoder->m_opts.stereo) // produce second channel
|
||||||
|
{
|
||||||
|
*m_dsdDecoder->m_state.audio_out_buf_p = (short) *m_dsdDecoder->m_state.audio_out_float_buf_p;
|
||||||
|
m_dsdDecoder->m_state.audio_out_buf_p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_dsdDecoder->m_state.audio_out_nb_samples++;
|
||||||
m_dsdDecoder->m_state.audio_out_float_buf_p++;
|
m_dsdDecoder->m_state.audio_out_float_buf_p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_dsdDecoder->m_state.audio_out_float_buf_p += m_dsdDecoder->m_opts.playoffset;
|
m_dsdDecoder->m_state.audio_out_float_buf_p += m_dsdDecoder->m_opts.playoffset;
|
||||||
}
|
}
|
||||||
else
|
else // leave at 8k
|
||||||
{
|
{
|
||||||
|
if (m_dsdDecoder->m_state.audio_out_nb_samples + 160 >= m_dsdDecoder->m_state.audio_out_buf_size)
|
||||||
|
{
|
||||||
|
m_dsdDecoder->resetAudio();
|
||||||
|
}
|
||||||
|
|
||||||
for (n = 0; n < 160; n++)
|
for (n = 0; n < 160; n++)
|
||||||
{
|
{
|
||||||
if (*m_dsdDecoder->m_state.audio_out_temp_buf_p > (float) 32760)
|
if (*m_dsdDecoder->m_state.audio_out_temp_buf_p > (float) 32760)
|
||||||
@ -229,13 +252,19 @@ void DSDMBEDecoder::processAudio()
|
|||||||
|
|
||||||
*m_dsdDecoder->m_state.audio_out_buf_p = (short) *m_dsdDecoder->m_state.audio_out_temp_buf_p;
|
*m_dsdDecoder->m_state.audio_out_buf_p = (short) *m_dsdDecoder->m_state.audio_out_temp_buf_p;
|
||||||
m_dsdDecoder->m_state.audio_out_buf_p++;
|
m_dsdDecoder->m_state.audio_out_buf_p++;
|
||||||
|
|
||||||
|
if (m_dsdDecoder->m_opts.stereo) // produce second channel
|
||||||
|
{
|
||||||
|
*m_dsdDecoder->m_state.audio_out_buf_p = (short) *m_dsdDecoder->m_state.audio_out_float_buf_p;
|
||||||
|
m_dsdDecoder->m_state.audio_out_buf_p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_dsdDecoder->m_state.audio_out_nb_samples++;
|
||||||
m_dsdDecoder->m_state.audio_out_temp_buf_p++;
|
m_dsdDecoder->m_state.audio_out_temp_buf_p++;
|
||||||
m_dsdDecoder->m_state.audio_out_idx++;
|
m_dsdDecoder->m_state.audio_out_idx++;
|
||||||
m_dsdDecoder->m_state.audio_out_idx2++;
|
m_dsdDecoder->m_state.audio_out_idx2++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: flag audio is uvailable
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSDMBEDecoder::upsample(float invalue)
|
void DSDMBEDecoder::upsample(float invalue)
|
||||||
|
@ -56,6 +56,7 @@ DSDOpts::DSDOpts()
|
|||||||
use_cosine_filter = 1;
|
use_cosine_filter = 1;
|
||||||
unmute_encrypted_p25 = 0;
|
unmute_encrypted_p25 = 0;
|
||||||
upsample = 0;
|
upsample = 0;
|
||||||
|
stereo = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DSDOpts::~DSDOpts()
|
DSDOpts::~DSDOpts()
|
||||||
|
@ -60,7 +60,8 @@ public:
|
|||||||
int delay;
|
int delay;
|
||||||
int use_cosine_filter;
|
int use_cosine_filter;
|
||||||
int unmute_encrypted_p25;
|
int unmute_encrypted_p25;
|
||||||
int upsample;
|
int upsample; //!< force audio upsampling to 48k
|
||||||
|
int stereo; //!< double each audio sample to produce L+R channels
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dsdplus
|
} // namespace dsdplus
|
||||||
|
@ -23,19 +23,27 @@ DSDState::DSDState()
|
|||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
dibit_buf = (int *) malloc(sizeof(int) * 1000000);
|
|
||||||
dibit_buf_p = dibit_buf + 200;
|
|
||||||
memset (dibit_buf, 0, sizeof (int) * 200);
|
|
||||||
repeat = 0;
|
repeat = 0;
|
||||||
audio_out_buf = (short *) malloc(sizeof(short) * 1000000);
|
|
||||||
memset (audio_out_buf, 0, 100 * sizeof (short));
|
dibit_buf = (int *) malloc(sizeof(int) * 1000000);
|
||||||
audio_out_buf_p = audio_out_buf + 100;
|
memset(dibit_buf, 0, sizeof(int) * 200);
|
||||||
audio_out_float_buf = (float *) malloc(sizeof(float) * 1000000);
|
dibit_buf_p = dibit_buf + 200;
|
||||||
memset (audio_out_float_buf, 0, 100 * sizeof (float));
|
|
||||||
audio_out_float_buf_p = audio_out_float_buf + 100;
|
audio_out_buf = (short *) malloc(sizeof(short) * 2 * 48000); // 1s of L+R S16LE samples
|
||||||
|
memset(audio_out_buf, 0, sizeof(short) * 2 * 48000);
|
||||||
|
audio_out_buf_p = audio_out_buf;
|
||||||
|
audio_out_nb_samples = 0;
|
||||||
|
audio_out_buf_size = 48000; // given in number of unique samples
|
||||||
|
|
||||||
|
audio_out_float_buf = (float *) malloc(sizeof(float) * 960); // 1 frame of 160 samples upampled 6 times
|
||||||
|
memset(audio_out_float_buf, 0, sizeof(float) * 960);
|
||||||
|
audio_out_float_buf_p = audio_out_float_buf;
|
||||||
|
|
||||||
|
audio_out_temp_buf_p = audio_out_temp_buf;
|
||||||
|
|
||||||
audio_out_idx = 0;
|
audio_out_idx = 0;
|
||||||
audio_out_idx2 = 0;
|
audio_out_idx2 = 0;
|
||||||
audio_out_temp_buf_p = audio_out_temp_buf;
|
|
||||||
center = 0;
|
center = 0;
|
||||||
jitter = -1;
|
jitter = -1;
|
||||||
synctype = -1;
|
synctype = -1;
|
||||||
@ -46,23 +54,28 @@ DSDState::DSDState()
|
|||||||
minref = -12000;
|
minref = -12000;
|
||||||
maxref = 12000;
|
maxref = 12000;
|
||||||
lastsample = 0;
|
lastsample = 0;
|
||||||
|
|
||||||
for (i = 0; i < 128; i++)
|
for (i = 0; i < 128; i++)
|
||||||
{
|
{
|
||||||
sbuf[i] = 0;
|
sbuf[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sidx = 0;
|
sidx = 0;
|
||||||
|
|
||||||
for (i = 0; i < 1024; i++)
|
for (i = 0; i < 1024; i++)
|
||||||
{
|
{
|
||||||
maxbuf[i] = 15000;
|
maxbuf[i] = 15000;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 1024; i++)
|
for (i = 0; i < 1024; i++)
|
||||||
{
|
{
|
||||||
minbuf[i] = -15000;
|
minbuf[i] = -15000;
|
||||||
}
|
}
|
||||||
|
|
||||||
midx = 0;
|
midx = 0;
|
||||||
err_str[0] = 0;
|
err_str[0] = 0;
|
||||||
sprintf (fsubtype, " ");
|
sprintf(fsubtype, " ");
|
||||||
sprintf (ftype, " ");
|
sprintf(ftype, " ");
|
||||||
symbolcnt = 0;
|
symbolcnt = 0;
|
||||||
rf_mod = 0;
|
rf_mod = 0;
|
||||||
numflips = 0;
|
numflips = 0;
|
||||||
@ -70,13 +83,15 @@ DSDState::DSDState()
|
|||||||
lastp25type = 0;
|
lastp25type = 0;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
carrier = 0;
|
carrier = 0;
|
||||||
|
|
||||||
for (i = 0; i < 25; i++)
|
for (i = 0; i < 25; i++)
|
||||||
{
|
{
|
||||||
for (j = 0; j < 16; j++)
|
for (j = 0; j < 16; j++)
|
||||||
{
|
{
|
||||||
tg[i][j] = 48;
|
tg[i][j] = 48;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tgcount = 0;
|
tgcount = 0;
|
||||||
lasttg = 0;
|
lasttg = 0;
|
||||||
lastsrc = 0;
|
lastsrc = 0;
|
||||||
@ -87,30 +102,27 @@ DSDState::DSDState()
|
|||||||
optind = 0;
|
optind = 0;
|
||||||
numtdulc = 0;
|
numtdulc = 0;
|
||||||
firstframe = 0;
|
firstframe = 0;
|
||||||
sprintf (slot0light, " slot0 ");
|
sprintf(slot0light, " slot0 ");
|
||||||
sprintf (slot1light, " slot1 ");
|
sprintf(slot1light, " slot1 ");
|
||||||
aout_gain = 25;
|
aout_gain = 25;
|
||||||
memset (aout_max_buf, 0, sizeof (float) * 200);
|
memset(aout_max_buf, 0, sizeof(float) * 200);
|
||||||
aout_max_buf_p = aout_max_buf;
|
aout_max_buf_p = aout_max_buf;
|
||||||
aout_max_buf_idx = 0;
|
aout_max_buf_idx = 0;
|
||||||
samplesPerSymbol = 10;
|
samplesPerSymbol = 10;
|
||||||
symbolCenter = 4;
|
symbolCenter = 4;
|
||||||
sprintf (algid, "________");
|
sprintf(algid, "________");
|
||||||
sprintf (keyid, "________________");
|
sprintf(keyid, "________________");
|
||||||
currentslot = 0;
|
currentslot = 0;
|
||||||
cur_mp = (mbe_parms *) malloc (sizeof (mbe_parms));
|
cur_mp = (mbe_parms *) malloc(sizeof(mbe_parms));
|
||||||
prev_mp = (mbe_parms *) malloc (sizeof (mbe_parms));
|
prev_mp = (mbe_parms *) malloc(sizeof(mbe_parms));
|
||||||
prev_mp_enhanced = (mbe_parms *) malloc (sizeof (mbe_parms));
|
prev_mp_enhanced = (mbe_parms *) malloc(sizeof(mbe_parms));
|
||||||
mbe_initMbeParms (cur_mp, prev_mp, prev_mp_enhanced);
|
mbe_initMbeParms(cur_mp, prev_mp, prev_mp_enhanced);
|
||||||
p25kid = 0;
|
p25kid = 0;
|
||||||
|
|
||||||
output_finished = 0;
|
output_finished = 0;
|
||||||
input_offset = 0;
|
|
||||||
output_offset = 0;
|
output_offset = 0;
|
||||||
input_samples = 0;
|
|
||||||
output_num_samples = 0;
|
output_num_samples = 0;
|
||||||
output_samples = 0;
|
output_samples = 0;
|
||||||
input_length = 0;
|
|
||||||
output_length = 0;
|
output_length = 0;
|
||||||
output_buffer = 0;
|
output_buffer = 0;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
#include <mbelib.h>
|
#include <mbelib.h>
|
||||||
|
}
|
||||||
|
|
||||||
namespace DSDplus
|
namespace DSDplus
|
||||||
{
|
{
|
||||||
@ -34,11 +37,13 @@ public:
|
|||||||
int *dibit_buf;
|
int *dibit_buf;
|
||||||
int *dibit_buf_p;
|
int *dibit_buf_p;
|
||||||
int repeat;
|
int repeat;
|
||||||
short *audio_out_buf;
|
short *audio_out_buf; //!< final result
|
||||||
short *audio_out_buf_p;
|
short *audio_out_buf_p;
|
||||||
float *audio_out_float_buf;
|
int audio_out_nb_samples;
|
||||||
|
int audio_out_buf_size;
|
||||||
|
float *audio_out_float_buf; //!< output of upsampler
|
||||||
float *audio_out_float_buf_p;
|
float *audio_out_float_buf_p;
|
||||||
float audio_out_temp_buf[160];
|
float audio_out_temp_buf[160]; //!< output of decoder
|
||||||
float *audio_out_temp_buf_p;
|
float *audio_out_temp_buf_p;
|
||||||
int audio_out_idx;
|
int audio_out_idx;
|
||||||
int audio_out_idx2;
|
int audio_out_idx2;
|
||||||
@ -94,17 +99,12 @@ public:
|
|||||||
mbe_parms *prev_mp_enhanced;
|
mbe_parms *prev_mp_enhanced;
|
||||||
int p25kid;
|
int p25kid;
|
||||||
|
|
||||||
const float *input_samples;
|
|
||||||
int input_length;
|
|
||||||
int input_offset;
|
|
||||||
|
|
||||||
short *output_buffer;
|
short *output_buffer;
|
||||||
int output_offset;
|
int output_offset;
|
||||||
float *output_samples;
|
float *output_samples;
|
||||||
int output_num_samples;
|
int output_num_samples;
|
||||||
int output_length;
|
int output_length;
|
||||||
int output_finished;
|
int output_finished;
|
||||||
FILE *logfile;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dsdplus
|
} // namespace dsdplus
|
||||||
|
@ -136,7 +136,7 @@ DSDDstar::~DSDDstar()
|
|||||||
void DSDDstar::init()
|
void DSDDstar::init()
|
||||||
{
|
{
|
||||||
if (m_dsdDecoder->m_opts.errorbars == 1) {
|
if (m_dsdDecoder->m_opts.errorbars == 1) {
|
||||||
fprintf(m_dsdDecoder->m_state.logfile, "e:");
|
fprintf(stderr, "e:");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_dsdDecoder->m_state.synctype == 18) {
|
if (m_dsdDecoder->m_state.synctype == 18) {
|
||||||
@ -226,7 +226,7 @@ void DSDDstar::processVoice()
|
|||||||
if ((bitbuffer & 0x00FFFFFF) == 0x00AAB468)
|
if ((bitbuffer & 0x00FFFFFF) == 0x00AAB468)
|
||||||
{
|
{
|
||||||
// we're slipping bits
|
// we're slipping bits
|
||||||
fprintf(m_dsdDecoder->m_state.logfile, "sync in voice after i=%d, restarting\n", i);
|
fprintf(stderr, "sync in voice after i=%d, restarting\n", i);
|
||||||
//ugh just start over
|
//ugh just start over
|
||||||
i = 0;
|
i = 0;
|
||||||
w = dW;
|
w = dW;
|
||||||
@ -267,7 +267,7 @@ void DSDDstar::processData()
|
|||||||
// looking if we're slipping bits
|
// looking if we're slipping bits
|
||||||
if (i != 96)
|
if (i != 96)
|
||||||
{
|
{
|
||||||
fprintf(m_dsdDecoder->m_state.logfile, "sync after i=%d\n", i);
|
fprintf(stderr, "sync after i=%d\n", i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,19 +50,10 @@ DSDDecoder::DSDDecoder()
|
|||||||
dsdstate->rf_mod = 0;
|
dsdstate->rf_mod = 0;
|
||||||
|
|
||||||
dsdstate->output_offset = 0;
|
dsdstate->output_offset = 0;
|
||||||
|
dsdopts->upsample = 1;
|
||||||
m_zeroBuffer = new short[1<<18]; // 128 kS
|
dsdopts->stereo = 1;
|
||||||
memset(m_zeroBuffer, 0, sizeof(short) * (1<<18));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DSDDecoder::~DSDDecoder()
|
DSDDecoder::~DSDDecoder()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSDDecoder::pushSamples(const short *samples,int nbSamples)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void DSDDecoder::popAudioSamples(AudioFifo *audioFifo, bool audioMute)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@ -28,12 +28,12 @@ public:
|
|||||||
DSDDecoder();
|
DSDDecoder();
|
||||||
~DSDDecoder();
|
~DSDDecoder();
|
||||||
|
|
||||||
void pushSamples(const short *samples, int nbSamples); // Push this amount of samples to the DSD decoder thread
|
void pushSample(short sample) { m_decoder.run(sample); }
|
||||||
void popAudioSamples(AudioFifo *audioFifo, bool audioMute);
|
short *getAudio(int& nbSamples) { return m_decoder.getAudio(nbSamples); }
|
||||||
|
void resetAudio() { m_decoder.resetAudio(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DSDplus::DSDDecoder m_decoder;
|
DSDplus::DSDDecoder m_decoder;
|
||||||
short *m_zeroBuffer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PLUGINS_CHANNEL_DEMODDSD_DSDDECODER_H_ */
|
#endif /* PLUGINS_CHANNEL_DEMODDSD_DSDDECODER_H_ */
|
||||||
|
@ -43,8 +43,6 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) :
|
|||||||
{
|
{
|
||||||
setObjectName("DSDDemod");
|
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_inputSampleRate = 96000;
|
||||||
m_config.m_inputFrequencyOffset = 0;
|
m_config.m_inputFrequencyOffset = 0;
|
||||||
m_config.m_rfBandwidth = 100;
|
m_config.m_rfBandwidth = 100;
|
||||||
@ -69,7 +67,6 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) :
|
|||||||
DSDDemod::~DSDDemod()
|
DSDDemod::~DSDDemod()
|
||||||
{
|
{
|
||||||
DSPEngine::instance()->removeAudioSink(&m_audioFifo);
|
DSPEngine::instance()->removeAudioSink(&m_audioFifo);
|
||||||
delete[] m_samplesBuffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSDDemod::configure(MessageQueue* messageQueue,
|
void DSDDemod::configure(MessageQueue* messageQueue,
|
||||||
@ -96,7 +93,6 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
Complex ci;
|
Complex ci;
|
||||||
|
|
||||||
m_settingsMutex.lock();
|
m_settingsMutex.lock();
|
||||||
m_samplesBufferIndex = 0;
|
|
||||||
m_scopeSampleBuffer.clear();
|
m_scopeSampleBuffer.clear();
|
||||||
|
|
||||||
for (SampleVector::const_iterator it = begin; it != end; ++it)
|
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);
|
Sample s(sample, 0.0);
|
||||||
m_scopeSampleBuffer.push_back(s);
|
m_scopeSampleBuffer.push_back(s);
|
||||||
m_samplesBuffer[m_samplesBufferIndex++] = sample;
|
m_dsdDecoder.pushSample(sample);
|
||||||
|
|
||||||
// if (m_running.m_audioMute)
|
// if (m_running.m_audioMute)
|
||||||
// {
|
// {
|
||||||
@ -185,8 +181,18 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
// m_audioBufferFill = 0;
|
// m_audioBufferFill = 0;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
m_dsdDecoder.popAudioSamples(&m_audioFifo, m_running.m_audioMute);
|
int nbAudioSamples;
|
||||||
m_dsdDecoder.pushSamples(m_samplesBuffer, m_samplesBufferIndex);
|
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))
|
if ((m_scope != 0) && (m_scopeEnabled))
|
||||||
{
|
{
|
||||||
|
@ -169,8 +169,6 @@ private:
|
|||||||
|
|
||||||
Real m_fmExcursion;
|
Real m_fmExcursion;
|
||||||
|
|
||||||
qint16 *m_samplesBuffer; //!< Input buffer for DSD decoder process
|
|
||||||
int m_samplesBufferIndex;
|
|
||||||
SampleVector m_scopeSampleBuffer;
|
SampleVector m_scopeSampleBuffer;
|
||||||
AudioVector m_audioBuffer;
|
AudioVector m_audioBuffer;
|
||||||
uint m_audioBufferFill;
|
uint m_audioBufferFill;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user