diff --git a/core/src/dsp/audio.h b/core/src/dsp/audio.h index 71228754..624abdbe 100644 --- a/core/src/dsp/audio.h +++ b/core/src/dsp/audio.h @@ -1,6 +1,5 @@ #pragma once #include -#include namespace dsp { class MonoToStereo : public generic_block { @@ -20,7 +19,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } @@ -64,7 +65,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } diff --git a/core/src/dsp/block.h b/core/src/dsp/block.h index 8a5a37d5..318da8a1 100644 --- a/core/src/dsp/block.h +++ b/core/src/dsp/block.h @@ -20,15 +20,17 @@ namespace dsp { if (running) { return; } + running = true; doStart(); } virtual void stop() { std::lock_guard lck(ctrlMtx); - if (!running && !tempStopped) { + if (!running) { return; } doStop(); + running = false; } virtual int calcOutSize(int inSize) { return inSize; } @@ -67,7 +69,6 @@ namespace dsp { } virtual void doStart() { - running = true; workerThread = std::thread(&generic_block::workerLoop, this); } diff --git a/core/src/dsp/demodulator.h b/core/src/dsp/demodulator.h index 21116575..5bc8361b 100644 --- a/core/src/dsp/demodulator.h +++ b/core/src/dsp/demodulator.h @@ -1,6 +1,5 @@ #pragma once #include -#include #define FAST_ATAN2_COEF1 FL_M_PI / 4.0f #define FAST_ATAN2_COEF2 3.0f * FAST_ATAN2_COEF1 @@ -44,7 +43,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } @@ -120,7 +121,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } @@ -182,7 +185,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } diff --git a/core/src/dsp/filter.h b/core/src/dsp/filter.h index a303f101..f9077d5b 100644 --- a/core/src/dsp/filter.h +++ b/core/src/dsp/filter.h @@ -1,7 +1,6 @@ #pragma once #include #include -#include namespace dsp { @@ -34,7 +33,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); + generic_block>::unregisterInput(_in); _in = in; + generic_block>::registerInput(_in); generic_block>::tempStart(); } @@ -110,7 +111,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } @@ -127,11 +130,8 @@ namespace dsp { } int run() { - spdlog::warn("+++++++++++++ DEEMP READING"); count = _in->read(); - if (count < 0) { spdlog::warn("++++++++++ DEEMP EXIT"); return -1; } - - spdlog::warn("+++++++++++++ DEEMP PROC"); + if (count < 0) { return -1; } if (bypass) { if (out.aquire() < 0) { return -1; } @@ -149,8 +149,6 @@ namespace dsp { } lastOut = out.data[count - 1]; - spdlog::warn("+++++++++++++ DEEMP DONE"); - _in->flush(); out.write(count); return count; diff --git a/core/src/dsp/processing.h b/core/src/dsp/processing.h index f851a56e..b066c3bb 100644 --- a/core/src/dsp/processing.h +++ b/core/src/dsp/processing.h @@ -16,13 +16,16 @@ namespace dsp { _freq = freq; phase = lv_cmake(1.0f, 0.0f); phaseDelta = lv_cmake(std::cos((_freq / _sampleRate) * 2.0f * FL_M_PI), std::sin((_freq / _sampleRate) * 2.0f * FL_M_PI)); + generic_block::registerInput(_in); generic_block::registerOutput(&out); } void setInputSize(stream* in) { std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); + generic_block::unregisterInput(_in); _in = in; + generic_block::registerInput(_in); generic_block::tempStart(); } diff --git a/core/src/dsp/resampling.h b/core/src/dsp/resampling.h index affd3d86..338ea82e 100644 --- a/core/src/dsp/resampling.h +++ b/core/src/dsp/resampling.h @@ -1,8 +1,7 @@ #pragma once #include #include - -#include +#include namespace dsp { template @@ -46,7 +45,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); + generic_block>::unregisterInput(_in); _in = in; + generic_block>::registerInput(_in); generic_block>::tempStart(); } @@ -96,9 +97,10 @@ namespace dsp { } int run() { - if constexpr (std::is_same_v) { spdlog::warn("======= RESAMP WAITING ========"); } + if constexpr (std::is_same_v) { spdlog::warn("--------- RESAMP START --------"); } count = _in->read(); if (count < 0) { + if constexpr (std::is_same_v) { spdlog::warn("--------- RESAMP STOP --------"); } return -1; } @@ -107,8 +109,6 @@ namespace dsp { memcpy(bufStart, _in->data, count * sizeof(T)); _in->flush(); - if constexpr (std::is_same_v) { spdlog::warn("======= RESAMP GOT DATA ========"); } - // Write to output if (out.aquire() < 0) { return -1; @@ -136,8 +136,6 @@ namespace dsp { } out.write(count); - if constexpr (std::is_same_v) { spdlog::warn("======= RESAMP WRITTEN ========"); } - memmove(buffer, &buffer[count], tapCount * sizeof(T)); return count; diff --git a/core/src/dsp/routing.h b/core/src/dsp/routing.h index d00fb6ba..64302ac5 100644 --- a/core/src/dsp/routing.h +++ b/core/src/dsp/routing.h @@ -80,7 +80,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); + generic_block>::unregisterInput(_in); _in = in; + generic_block>::registerInput(_in); generic_block>::tempStart(); } diff --git a/core/src/dsp/sink.h b/core/src/dsp/sink.h index 1d362721..868b2cec 100644 --- a/core/src/dsp/sink.h +++ b/core/src/dsp/sink.h @@ -22,7 +22,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); + generic_block>::unregisterInput(_in); _in = in; + generic_block>::registerInput(_in); generic_block>::tempStart(); } @@ -67,7 +69,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); + generic_block>::unregisterInput(_in); _in = in; + generic_block>::registerInput(_in); generic_block>::tempStart(); } @@ -114,7 +118,9 @@ namespace dsp { void setInput(stream* in) { std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); + generic_block>::unregisterInput(_in); _in = in; + generic_block>::registerInput(_in); generic_block>::tempStart(); } diff --git a/core/src/dsp/stream.h b/core/src/dsp/stream.h index 71cf5656..96fae88f 100644 --- a/core/src/dsp/stream.h +++ b/core/src/dsp/stream.h @@ -39,7 +39,6 @@ namespace dsp { std::lock_guard lck(sigMtx); contentSize = size; dataReady = true; - lck.~lock_guard(); } cv.notify_one(); } @@ -56,7 +55,6 @@ namespace dsp { { std::lock_guard lck(sigMtx); dataReady = false; - lck.~lock_guard(); } cv.notify_one(); } @@ -65,7 +63,6 @@ namespace dsp { { std::lock_guard lck(sigMtx); readerStop = true; - lck.~lock_guard(); } cv.notify_one(); } @@ -78,7 +75,6 @@ namespace dsp { { std::lock_guard lck(sigMtx); writerStop = true; - lck.~lock_guard(); } cv.notify_one(); } diff --git a/radio/src/path.cpp b/radio/src/path.cpp index 86e3ec79..c2a982ae 100644 --- a/radio/src/path.cpp +++ b/radio/src/path.cpp @@ -46,13 +46,11 @@ void SigPath::init(std::string vfoName, uint64_t sampleRate, int blockSize) { ssbDemod.init(vfo->output, 6000, 3000, dsp::SSBDemod::MODE_USB); audioWin.init(24000, 24000, 200000); - audioResamp.init(&DUMMY_STREAM, &audioWin, 200000, 48000); + audioResamp.init(&demod.out, &audioWin, 200000, 48000); audioWin.setSampleRate(audioResamp.getInterpolation() * 200000); audioResamp.updateWindow(&audioWin); deemp.init(&audioResamp.out, 48000, 50e-6); - - ns.init(&demod.out); outputSampleRate = audio::registerMonoStream(&deemp.out, vfoName, vfoName, sampleRateChangeHandler, this); @@ -287,7 +285,6 @@ void SigPath::setBandwidth(float bandWidth) { void SigPath::start() { demod.start(); audioResamp.start(); - //deemp.start(); - ns.start(); + deemp.start(); audio::startStream(vfoName); } \ No newline at end of file diff --git a/radio/src/path.h b/radio/src/path.h index d6bb96f6..21e6a257 100644 --- a/radio/src/path.h +++ b/radio/src/path.h @@ -63,10 +63,6 @@ private: dsp::filter_window::BlackmanWindow audioWin; dsp::PolyphaseResampler audioResamp; - // Debug - dsp::NullSink ns; - dsp::stream DUMMY_STREAM; - std::string vfoName; float sampleRate;