1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-09 08:31:13 +02:00

Remove naked new[] in: AudioIO

This commit is contained in:
Paul Licameli 2016-04-14 12:08:36 -04:00
parent e6db1a57a3
commit 2b23667211
2 changed files with 30 additions and 71 deletions

View File

@ -1705,10 +1705,11 @@ int AudioIO::StartStream(const ConstWaveTrackArray &playbackTracks,
mPlayMode = options.playLooped ? PLAY_LOOPED : PLAY_STRAIGHT; mPlayMode = options.playLooped ? PLAY_LOOPED : PLAY_STRAIGHT;
mCutPreviewGapStart = options.cutPreviewGapStart; mCutPreviewGapStart = options.cutPreviewGapStart;
mCutPreviewGapLen = options.cutPreviewGapLen; mCutPreviewGapLen = options.cutPreviewGapLen;
mPlaybackBuffers = NULL;
mPlaybackMixers = NULL; mPlaybackBuffers.reset();
mCaptureBuffers = NULL; mPlaybackMixers.reset();
mResample = NULL; mCaptureBuffers.reset();
mResample.reset();
double playbackTime = 4.0; double playbackTime = 4.0;
@ -1859,12 +1860,8 @@ int AudioIO::StartStream(const ConstWaveTrackArray &playbackTracks,
auto playbackMixBufferSize = auto playbackMixBufferSize =
mPlaybackSamplesToCopy; mPlaybackSamplesToCopy;
mPlaybackBuffers = new RingBuffer* [mPlaybackTracks.size()]; mPlaybackBuffers.reinit(mPlaybackTracks.size());
mPlaybackMixers = new Mixer* [mPlaybackTracks.size()]; mPlaybackMixers.reinit(mPlaybackTracks.size());
// Set everything to zero in case we have to DELETE these due to a memory exception.
memset(mPlaybackBuffers, 0, sizeof(RingBuffer*)*mPlaybackTracks.size());
memset(mPlaybackMixers, 0, sizeof(Mixer*)*mPlaybackTracks.size());
const Mixer::WarpOptions &warpOptions = const Mixer::WarpOptions &warpOptions =
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT #ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
@ -1878,10 +1875,11 @@ int AudioIO::StartStream(const ConstWaveTrackArray &playbackTracks,
for (unsigned int i = 0; i < mPlaybackTracks.size(); i++) for (unsigned int i = 0; i < mPlaybackTracks.size(); i++)
{ {
mPlaybackBuffers[i] = new RingBuffer(floatSample, playbackBufferSize); mPlaybackBuffers[i] = std::make_unique<RingBuffer>(floatSample, playbackBufferSize);
// MB: use normal time for the end time, not warped time! // MB: use normal time for the end time, not warped time!
mPlaybackMixers[i] = new Mixer(WaveTrackConstArray{ mPlaybackTracks[i] }, mPlaybackMixers[i] = std::make_unique<Mixer>
(WaveTrackConstArray{ mPlaybackTracks[i] },
warpOptions, warpOptions,
mT0, mT1, 1, mT0, mT1, 1,
playbackMixBufferSize, false, playbackMixBufferSize, false,
@ -1904,19 +1902,16 @@ int AudioIO::StartStream(const ConstWaveTrackArray &playbackTracks,
return 0; return 0;
} }
mCaptureBuffers = new RingBuffer* [mCaptureTracks.size()]; mCaptureBuffers.reinit(mCaptureTracks.size());
mResample = new Resample* [mCaptureTracks.size()]; mResample.reinit(mCaptureTracks.size());
mFactor = sampleRate / mRate; mFactor = sampleRate / mRate;
// Set everything to zero in case we have to DELETE these due to a memory exception.
memset(mCaptureBuffers, 0, sizeof(RingBuffer*)*mCaptureTracks.size());
memset(mResample, 0, sizeof(Resample*)*mCaptureTracks.size());
for( unsigned int i = 0; i < mCaptureTracks.size(); i++ ) for( unsigned int i = 0; i < mCaptureTracks.size(); i++ )
{ {
mCaptureBuffers[i] = new RingBuffer( mCaptureTracks[i]->GetSampleFormat(), mCaptureBuffers[i] = std::make_unique<RingBuffer>
( mCaptureTracks[i]->GetSampleFormat(),
captureBufferSize ); captureBufferSize );
mResample[i] = new Resample(true, mFactor, mFactor); // constant rate resampling mResample[i] = std::make_unique<Resample>(true, mFactor, mFactor); // constant rate resampling
} }
} }
} }
@ -2087,37 +2082,10 @@ void AudioIO::StartStreamCleanup(bool bOnlyBuffers)
EffectManager::Get().RealtimeFinalize(); EffectManager::Get().RealtimeFinalize();
} }
if(mPlaybackBuffers) mPlaybackBuffers.reset();
{ mPlaybackMixers.reset();
for (unsigned int i = 0; i < mPlaybackTracks.size(); i++) mCaptureBuffers.reset();
delete mPlaybackBuffers[i]; mResample.reset();
delete [] mPlaybackBuffers;
mPlaybackBuffers = NULL;
}
if(mPlaybackMixers)
{
for (unsigned int i = 0; i < mPlaybackTracks.size(); i++)
delete mPlaybackMixers[i];
delete [] mPlaybackMixers;
mPlaybackMixers = NULL;
}
if(mCaptureBuffers)
{
for (unsigned int i = 0; i < mCaptureTracks.size(); i++)
delete mCaptureBuffers[i];
delete [] mCaptureBuffers;
mCaptureBuffers = NULL;
}
if(mResample)
{
for (unsigned int i = 0; i < mCaptureTracks.size(); i++)
delete mResample[i];
delete [] mResample;
mResample = NULL;
}
if(!bOnlyBuffers) if(!bOnlyBuffers)
{ {
@ -2443,14 +2411,8 @@ void AudioIO::StopStream()
if (mPlaybackTracks.size() > 0) if (mPlaybackTracks.size() > 0)
{ {
for (unsigned int i = 0; i < mPlaybackTracks.size(); i++) mPlaybackBuffers.reset();
{ mPlaybackMixers.reset();
delete mPlaybackBuffers[i];
delete mPlaybackMixers[i];
}
delete[] mPlaybackBuffers;
delete[] mPlaybackMixers;
} }
// //
@ -2458,6 +2420,9 @@ void AudioIO::StopStream()
// //
if (mCaptureTracks.size() > 0) if (mCaptureTracks.size() > 0)
{ {
mCaptureBuffers.reset();
mResample.reset();
// //
// We only apply latency correction when we actually played back // We only apply latency correction when we actually played back
// tracks during the recording. If we did not play back tracks, // tracks during the recording. If we did not play back tracks,
@ -2473,9 +2438,6 @@ void AudioIO::StopStream()
for (unsigned int i = 0; i < mCaptureTracks.size(); i++) for (unsigned int i = 0; i < mCaptureTracks.size(); i++)
{ {
delete mCaptureBuffers[i];
delete mResample[i];
WaveTrack* track = mCaptureTracks[i]; WaveTrack* track = mCaptureTracks[i];
track->Flush(); track->Flush();
@ -2521,9 +2483,6 @@ void AudioIO::StopStream()
} }
} }
} }
delete[] mCaptureBuffers;
delete[] mResample;
} }
} }
@ -4378,7 +4337,7 @@ int audacityAudioCallback(const void *inputBuffer, void *outputBuffer,
bool selected = false; bool selected = false;
int group = 0; int group = 0;
int chanCnt = 0; int chanCnt = 0;
int maxLen = 0; decltype(framesPerBuffer) maxLen = 0;
for (unsigned t = 0; t < numPlaybackTracks; t++) for (unsigned t = 0; t < numPlaybackTracks; t++)
{ {
const WaveTrack *vt = gAudioIO->mPlaybackTracks[t]; const WaveTrack *vt = gAudioIO->mPlaybackTracks[t];
@ -4410,7 +4369,7 @@ int audacityAudioCallback(const void *inputBuffer, void *outputBuffer,
#define ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END #define ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END
#ifdef ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END #ifdef ORIGINAL_DO_NOT_PLAY_ALL_MUTED_TRACKS_TO_END
int len = 0; decltype(framesPerBuffer) len = 0;
// this is original code prior to r10680 -RBD // this is original code prior to r10680 -RBD
if (cut) if (cut)
{ {

View File

@ -555,13 +555,13 @@ private:
#ifdef EXPERIMENTAL_MIDI_OUT #ifdef EXPERIMENTAL_MIDI_OUT
std::unique_ptr<AudioThread> mMidiThread; std::unique_ptr<AudioThread> mMidiThread;
#endif #endif
Resample **mResample; ArrayOf<std::unique_ptr<Resample>> mResample;
RingBuffer **mCaptureBuffers; ArrayOf<std::unique_ptr<RingBuffer>> mCaptureBuffers;
WaveTrackArray mCaptureTracks; WaveTrackArray mCaptureTracks;
RingBuffer **mPlaybackBuffers; ArrayOf<std::unique_ptr<RingBuffer>> mPlaybackBuffers;
ConstWaveTrackArray mPlaybackTracks; ConstWaveTrackArray mPlaybackTracks;
Mixer **mPlaybackMixers; ArrayOf<std::unique_ptr<Mixer>> mPlaybackMixers;
volatile int mStreamToken; volatile int mStreamToken;
static int mNextStreamToken; static int mNextStreamToken;
double mFactor; double mFactor;