Additional cleanup of RT-unsafe logic. (#894)

ms-reporter-filter-bug
Mooneer Salem 2025-05-27 09:42:13 -07:00 committed by GitHub
parent 284ff94750
commit aedcc1f3cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 22 additions and 16 deletions

View File

@ -898,7 +898,10 @@ void AudioOptsDialog::plotDeviceInputForAFewSecs(wxString devName, PlotScalar *p
} }
int n8k = resample(src, in8k_short, in48k_short, 8000, sampleRate, TEST_BUF_SIZE, TEST_BUF_SIZE); int n8k = resample(src, in8k_short, in48k_short, 8000, sampleRate, TEST_BUF_SIZE, TEST_BUF_SIZE);
resample_for_plot(fifo, in8k_short, n8k, FS); short* tmp = new short[n8k];
assert(tmp != nullptr);
resample_for_plot(fifo, in8k_short, tmp, n8k, FS);
delete[] tmp;
short plotSamples[TEST_WAVEFORM_PLOT_BUF]; short plotSamples[TEST_WAVEFORM_PLOT_BUF];
if (codec2_fifo_read(fifo, plotSamples, TEST_WAVEFORM_PLOT_BUF)) if (codec2_fifo_read(fifo, plotSamples, TEST_WAVEFORM_PLOT_BUF))
@ -1033,7 +1036,10 @@ void AudioOptsDialog::plotDeviceOutputForAFewSecs(wxString devName, PlotScalar *
} }
int n8k = resample(src, out8k_short, out48k_short, 8000, sampleRate, TEST_BUF_SIZE, TEST_BUF_SIZE); int n8k = resample(src, out8k_short, out48k_short, 8000, sampleRate, TEST_BUF_SIZE, TEST_BUF_SIZE);
resample_for_plot(fifo, out8k_short, n8k, FS); short* tmp = new short[n8k];
assert(tmp != nullptr);
resample_for_plot(fifo, out8k_short, tmp, n8k, FS);
delete[] tmp;
short plotSamples[TEST_WAVEFORM_PLOT_BUF]; short plotSamples[TEST_WAVEFORM_PLOT_BUF];
if (codec2_fifo_read(fifo, plotSamples, TEST_WAVEFORM_PLOT_BUF)) if (codec2_fifo_read(fifo, plotSamples, TEST_WAVEFORM_PLOT_BUF))

View File

@ -520,7 +520,7 @@ class MainFrame : public TopFrame
void onRadioDisconnected_(IRigController* ptr); void onRadioDisconnected_(IRigController* ptr);
}; };
void resample_for_plot(struct FIFO *plotFifo, short buf[], int length, int fs); void resample_for_plot(struct FIFO *plotFifo, short buf[], short* dec_samples, int length, int fs);
int resample(SRC_STATE *src, int resample(SRC_STATE *src,
short output_short[], short output_short[],

View File

@ -86,6 +86,7 @@ void AudioPipeline::appendPipelineStep(std::shared_ptr<IPipelineStep> pipelineSt
pipelineSteps_.push_back(pipelineStep); pipelineSteps_.push_back(pipelineStep);
resamplers_.resize(pipelineSteps_.size(), nullptr); // will be updated by reloadResampler_() below. resamplers_.resize(pipelineSteps_.size(), nullptr); // will be updated by reloadResampler_() below.
reloadResampler_(pipelineSteps_.size() - 1); reloadResampler_(pipelineSteps_.size() - 1);
reloadResultResampler_();
} }
void AudioPipeline::reloadResampler_(int index) void AudioPipeline::reloadResampler_(int index)

View File

@ -72,5 +72,5 @@ std::shared_ptr<short> ComputeRfSpectrumStep::execute(std::shared_ptr<short> inp
// Tap only, no output. // Tap only, no output.
*numOutputSamples = 0; *numOutputSamples = 0;
return std::shared_ptr<short>((short*)nullptr, std::default_delete<short[]>()); return std::shared_ptr<short>(nullptr);
} }

View File

@ -60,7 +60,7 @@ public:
virtual int getOutputSampleRate() const; virtual int getOutputSampleRate() const;
virtual std::shared_ptr<short> execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples); virtual std::shared_ptr<short> execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples);
const std::vector<std::shared_ptr<IPipelineStep>> getParallelSteps() const { return parallelSteps_; } const std::vector<std::shared_ptr<IPipelineStep>>& getParallelSteps() const { return parallelSteps_; }
std::shared_ptr<void> getState() { return state_; } std::shared_ptr<void> getState() { return state_; }

View File

@ -24,17 +24,18 @@
#include "ResamplePlotStep.h" #include "ResamplePlotStep.h"
// TBD - maybe include code for function here? // TBD - maybe include code for function here?
extern void resample_for_plot(struct FIFO *plotFifo, short buf[], int length, int fs); extern void resample_for_plot(struct FIFO *plotFifo, short buf[], short* dec_samples, int length, int fs);
ResampleForPlotStep::ResampleForPlotStep(struct FIFO* fifo) ResampleForPlotStep::ResampleForPlotStep(struct FIFO* fifo)
: fifo_(fifo) : fifo_(fifo)
{ {
// empty decSamples_ = new short[FS];
assert(decSamples_ != nullptr);
} }
ResampleForPlotStep::~ResampleForPlotStep() ResampleForPlotStep::~ResampleForPlotStep()
{ {
// empty delete[] decSamples_;
} }
int ResampleForPlotStep::getInputSampleRate() const int ResampleForPlotStep::getInputSampleRate() const
@ -49,8 +50,8 @@ int ResampleForPlotStep::getOutputSampleRate() const
std::shared_ptr<short> ResampleForPlotStep::execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples) std::shared_ptr<short> ResampleForPlotStep::execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples)
{ {
resample_for_plot(fifo_, inputSamples.get(), numInputSamples, FS); resample_for_plot(fifo_, inputSamples.get(), decSamples_, numInputSamples, FS);
*numOutputSamples = 0; *numOutputSamples = 0;
return std::shared_ptr<short>((short*)nullptr, std::default_delete<short[]>()); return std::shared_ptr<short>(nullptr);
} }

View File

@ -41,6 +41,7 @@ public:
private: private:
struct FIFO* fifo_; struct FIFO* fifo_;
short* decSamples_;
}; };
#endif // AUDIO_PIPELINE__RESAMPLE_PLOT_STEP_H #endif // AUDIO_PIPELINE__RESAMPLE_PLOT_STEP_H

View File

@ -300,13 +300,11 @@ int resample(SRC_STATE *src,
// we don't hammer the graphics system too hard. Saves decimated data // we don't hammer the graphics system too hard. Saves decimated data
// to a fifo for plotting on screen. // to a fifo for plotting on screen.
void resample_for_plot(struct FIFO *plotFifo, short buf[], int length, int fs) void resample_for_plot(struct FIFO *plotFifo, short buf[], short* dec_samples, int length, int fs)
{ {
int decimation = fs/WAVEFORM_PLOT_FS; int decimation = fs/WAVEFORM_PLOT_FS;
int nSamples, sample; int nSamples, sample;
int i, st, en, max, min; int i, st, en, max, min;
short* dec_samples = new short[length];
assert(dec_samples != nullptr);
nSamples = length/decimation; nSamples = length/decimation;
if (nSamples % 2) nSamples++; // dec_samples is populated in groups of two if (nSamples % 2) nSamples++; // dec_samples is populated in groups of two
@ -325,7 +323,6 @@ void resample_for_plot(struct FIFO *plotFifo, short buf[], int length, int fs)
dec_samples[sample+1] = min; dec_samples[sample+1] = min;
} }
codec2_fifo_write(plotFifo, dec_samples, nSamples); codec2_fifo_write(plotFifo, dec_samples, nSamples);
delete[] dec_samples;
} }
// State machine to detect sync // State machine to detect sync