diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index a8d43b32d..d077c7579 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -17,10 +17,15 @@ #include #include + #include "dsp/dspengine.h" +#include "dsp/dspdevicesourceengine.h" +#include "dsp/dspdevicesinkengine.h" + DSPEngine::DSPEngine() : m_deviceSourceEnginesUIDSequence(0), + m_deviceSinkEnginesUIDSequence(0), m_audioSampleRate(48000) // Use default output device at 48 kHz { m_dvSerialSupport = false; @@ -63,6 +68,24 @@ void DSPEngine::removeLastDeviceSourceEngine() } } +DSPDeviceSinkEngine *DSPEngine::addDeviceSinkEngine() +{ + m_deviceSinkEngines.push_back(new DSPDeviceSinkEngine(m_deviceSinkEnginesUIDSequence)); + m_deviceSinkEnginesUIDSequence++; + return m_deviceSinkEngines.back(); +} + +void DSPEngine::removeLastDeviceSinkEngine() +{ + if (m_deviceSinkEngines.size() > 0) + { + DSPDeviceSinkEngine *lastDeviceEngine = m_deviceSinkEngines.back(); + delete lastDeviceEngine; + m_deviceSinkEngines.pop_back(); + m_deviceSinkEnginesUIDSequence--; + } +} + void DSPEngine::startAudio() { m_audioOutput.start(-1, m_audioSampleRate); @@ -114,6 +137,23 @@ DSPDeviceSourceEngine *DSPEngine::getDeviceSourceEngineByUID(uint uid) return 0; } +DSPDeviceSinkEngine *DSPEngine::getDeviceSinkEngineByUID(uint uid) +{ + std::vector::iterator it = m_deviceSinkEngines.begin(); + + while (it != m_deviceSinkEngines.end()) + { + if ((*it)->getUID() == uid) + { + return *it; + } + + ++it; + } + + return 0; +} + void DSPEngine::setDVSerialSupport(bool support) { #ifdef DSD_USE_SERIALDV diff --git a/sdrbase/dsp/dspengine.h b/sdrbase/dsp/dspengine.h index 7f2e30274..5ec543ef7 100644 --- a/sdrbase/dsp/dspengine.h +++ b/sdrbase/dsp/dspengine.h @@ -21,14 +21,13 @@ #include #include #include "audio/audiooutput.h" -#include "dspdevicesourceengine.h" #include "util/export.h" #ifdef DSD_USE_SERIALDV #include "dsp/dvserialengine.h" #endif class DSPDeviceSourceEngine; -class ThreadedBasebandSampleSink; +class DSPDeviceSinkEngine; class SDRANGEL_API DSPEngine : public QObject { Q_OBJECT @@ -43,6 +42,9 @@ public: DSPDeviceSourceEngine *addDeviceSourceEngine(); void removeLastDeviceSourceEngine(); + DSPDeviceSinkEngine *addDeviceSinkEngine(); + void removeLastDeviceSinkEngine(); + void startAudio(); void stopAudio(); void startAudioImmediate(); @@ -51,7 +53,10 @@ public: DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(uint deviceIndex) { return m_deviceSourceEngines[deviceIndex]; } DSPDeviceSourceEngine *getDeviceSourceEngineByUID(uint uid); - void addAudioSink(AudioFifo* audioFifo); //!< Add the audio sink + DSPDeviceSinkEngine *getDeviceSinkEngineByIndex(uint deviceIndex) { return m_deviceSinkEngines[deviceIndex]; } + DSPDeviceSinkEngine *getDeviceSinkEngineByUID(uint uid); + + void addAudioSink(AudioFifo* audioFifo); //!< Add the audio sink void removeAudioSink(AudioFifo* audioFifo); //!< Remove the audio sink // Serial DV methods: @@ -84,6 +89,8 @@ public: private: std::vector m_deviceSourceEngines; uint m_deviceSourceEnginesUIDSequence; + std::vector m_deviceSinkEngines; + uint m_deviceSinkEnginesUIDSequence; AudioOutput m_audioOutput; uint m_audioSampleRate; bool m_dvSerialSupport;