Add additional checking to attempt to debug memory trashing.
parent
1b950eb126
commit
d421d7e8f7
|
@ -48,20 +48,29 @@ int FreeDVTransmitStep::getOutputSampleRate() const
|
|||
|
||||
std::shared_ptr<short> FreeDVTransmitStep::execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples)
|
||||
{
|
||||
auto mode = interface_.getTxMode();
|
||||
|
||||
*numOutputSamples = interface_.getTxNNomModemSamples();
|
||||
short* outputSamples = new short[*numOutputSamples];
|
||||
assert(outputSamples != nullptr);
|
||||
|
||||
if (mode == FREEDV_MODE_800XA || mode == FREEDV_MODE_2400B)
|
||||
short* outputSamples = nullptr;
|
||||
|
||||
if (numInputSamples > 0)
|
||||
{
|
||||
/* 800XA doesn't support complex output just yet */
|
||||
interface_.transmit(outputSamples, inputSamples.get());
|
||||
auto mode = interface_.getTxMode();
|
||||
|
||||
*numOutputSamples = interface_.getTxNNomModemSamples();
|
||||
outputSamples = new short[*numOutputSamples];
|
||||
assert(outputSamples != nullptr);
|
||||
|
||||
if (mode == FREEDV_MODE_800XA || mode == FREEDV_MODE_2400B)
|
||||
{
|
||||
/* 800XA doesn't support complex output just yet */
|
||||
interface_.transmit(outputSamples, inputSamples.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
interface_.complexTransmit(outputSamples, inputSamples.get(), getFreqOffsetFn_(), *numOutputSamples);
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
interface_.complexTransmit(outputSamples, inputSamples.get(), getFreqOffsetFn_(), *numOutputSamples);
|
||||
*numOutputSamples = 0;
|
||||
}
|
||||
|
||||
return std::shared_ptr<short>(outputSamples, std::default_delete<short[]>());
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
//=========================================================================
|
||||
|
||||
#include "PlaybackStep.h"
|
||||
#include <cassert>
|
||||
|
||||
PlaybackStep::PlaybackStep(
|
||||
int inputSampleRate, std::function<int()> fileSampleRateFn,
|
||||
|
@ -51,14 +52,19 @@ int PlaybackStep::getOutputSampleRate() const
|
|||
std::shared_ptr<short> PlaybackStep::execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples)
|
||||
{
|
||||
auto playFile = getSndFileFn_();
|
||||
assert(playFile != nullptr);
|
||||
|
||||
unsigned int nsf = numInputSamples * getOutputSampleRate()/getInputSampleRate();
|
||||
assert(nsf > 0);
|
||||
|
||||
short* outputSamples = new short[nsf];
|
||||
assert(outputSamples != nullptr);
|
||||
|
||||
*numOutputSamples = sf_read_short(playFile, outputSamples, nsf);
|
||||
if (*numOutputSamples == 0)
|
||||
if ((unsigned)*numOutputSamples < nsf)
|
||||
{
|
||||
fileCompleteFn_();
|
||||
}
|
||||
|
||||
return std::shared_ptr<short>(outputSamples, std::default_delete<short[]>());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,13 +62,24 @@ int ResampleStep::getOutputSampleRate() const
|
|||
|
||||
std::shared_ptr<short> ResampleStep::execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples)
|
||||
{
|
||||
double scaleFactor = ((double)outputSampleRate_)/((double)inputSampleRate_);
|
||||
int outputArraySize = std::max(numInputSamples, (int)(scaleFactor*numInputSamples));
|
||||
short* outputSamples = new short[outputArraySize];
|
||||
|
||||
*numOutputSamples = resample(
|
||||
resampleState_, outputSamples, inputSamples.get(), outputSampleRate_,
|
||||
inputSampleRate_, outputArraySize, numInputSamples);
|
||||
|
||||
short* outputSamples = nullptr;
|
||||
if (numInputSamples > 0)
|
||||
{
|
||||
double scaleFactor = ((double)outputSampleRate_)/((double)inputSampleRate_);
|
||||
int outputArraySize = std::max(numInputSamples, (int)(scaleFactor*numInputSamples));
|
||||
assert(outputArraySize > 0);
|
||||
|
||||
outputSamples = new short[outputArraySize];
|
||||
assert(outputSamples != nullptr);
|
||||
|
||||
*numOutputSamples = resample(
|
||||
resampleState_, outputSamples, inputSamples.get(), outputSampleRate_,
|
||||
inputSampleRate_, outputArraySize, numInputSamples);
|
||||
}
|
||||
else
|
||||
{
|
||||
*numOutputSamples = 0;
|
||||
}
|
||||
|
||||
return std::shared_ptr<short>(outputSamples, std::default_delete<short[]>());
|
||||
}
|
||||
|
|
|
@ -53,18 +53,22 @@ int SpeexStep::getOutputSampleRate() const
|
|||
|
||||
std::shared_ptr<short> SpeexStep::execute(std::shared_ptr<short> inputSamples, int numInputSamples, int* numOutputSamples)
|
||||
{
|
||||
short* outputSamples = new short[numInputSamples];
|
||||
assert(outputSamples != nullptr);
|
||||
|
||||
memcpy(outputSamples, inputSamples.get(), sizeof(short)*numInputSamples);
|
||||
|
||||
g_mutexProtectingCallbackData.Lock();
|
||||
if (*speexStateObj_)
|
||||
short* outputSamples = nullptr;
|
||||
if (numInputSamples > 0)
|
||||
{
|
||||
speex_preprocess_run(*speexStateObj_, outputSamples);
|
||||
}
|
||||
g_mutexProtectingCallbackData.Unlock();
|
||||
outputSamples = new short[numInputSamples];
|
||||
assert(outputSamples != nullptr);
|
||||
|
||||
memcpy(outputSamples, inputSamples.get(), sizeof(short)*numInputSamples);
|
||||
|
||||
g_mutexProtectingCallbackData.Lock();
|
||||
if (*speexStateObj_)
|
||||
{
|
||||
speex_preprocess_run(*speexStateObj_, outputSamples);
|
||||
}
|
||||
g_mutexProtectingCallbackData.Unlock();
|
||||
}
|
||||
|
||||
*numOutputSamples = numInputSamples;
|
||||
return std::shared_ptr<short>(outputSamples, std::default_delete<short[]>());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,17 +53,17 @@ static wxWindow* createMyExtraPlayFilePanel(wxWindow *parent)
|
|||
|
||||
void MainFrame::StopPlayFileToMicIn(void)
|
||||
{
|
||||
g_mutexProtectingCallbackData.Lock();
|
||||
if (g_playFileToMicIn)
|
||||
{
|
||||
g_mutexProtectingCallbackData.Lock();
|
||||
g_playFileToMicIn = false;
|
||||
sf_close(g_sfPlayFile);
|
||||
g_sfPlayFile = nullptr;
|
||||
SetStatusText(wxT(""));
|
||||
m_menuItemPlayFileToMicIn->SetItemLabel(wxString(_("Start Play File - Mic In...")));
|
||||
g_mutexProtectingCallbackData.Unlock();
|
||||
VoiceKeyerProcessEvent(VK_PLAY_FINISHED);
|
||||
}
|
||||
g_mutexProtectingCallbackData.Unlock();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue