1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-20 22:30:05 +02:00

Remove some naked new amd delete in: AudioIO

This commit is contained in:
Paul Licameli 2016-08-05 00:39:13 -04:00
parent 27527ebf5c
commit b47bcb548e
3 changed files with 25 additions and 42 deletions

View File

@ -2017,8 +2017,6 @@ int AudacityApp::OnExit()
DeinitFFT();
DeinitAudioIO();
// Terminate the PluginManager (must be done before deleting the locale)
PluginManager::Get().Terminate();

View File

@ -326,7 +326,8 @@ writing audio.
using std::max;
using std::min;
AudioIO *gAudioIO;
std::unique_ptr<AudioIO> ugAudioIO;
AudioIO *gAudioIO{};
DEFINE_EVENT_TYPE(EVT_AUDIOIO_PLAYBACK);
DEFINE_EVENT_TYPE(EVT_AUDIOIO_CAPTURE);
@ -913,7 +914,8 @@ class MidiThread final : public AudioThread {
void InitAudioIO()
{
gAudioIO = new AudioIO();
ugAudioIO.reset(safenew AudioIO());
gAudioIO = ugAudioIO.get();
gAudioIO->mThread->Run();
#ifdef EXPERIMENTAL_MIDI_OUT
gAudioIO->mMidiThread->Run();
@ -941,11 +943,6 @@ void InitAudioIO()
gPrefs->Flush();
}
void DeinitAudioIO()
{
delete gAudioIO;
}
wxString DeviceName(const PaDeviceInfo* info)
{
wxString infoName = wxSafeConvertMB2WX(info->name);
@ -1046,12 +1043,12 @@ AudioIO::AudioIO()
// Same logic for PortMidi as described above for PortAudio
}
mMidiThread = new MidiThread();
mMidiThread = std::make_unique<MidiThread>();
mMidiThread->Create();
#endif
// Start thread
mThread = new AudioThread();
mThread = std::make_unique<AudioThread>();
mThread->Create();
#if defined(USE_PORTMIXER)
@ -1092,8 +1089,12 @@ AudioIO::~AudioIO()
#ifdef EXPERIMENTAL_MIDI_OUT
Pm_Terminate();
/* Delete is a "graceful" way to stop the thread.
(Kill is the not-graceful way.) */
mMidiThread->Delete();
delete mMidiThread;
mMidiThread.reset();
#endif
/* Delete is a "graceful" way to stop the thread.
@ -1103,13 +1104,9 @@ AudioIO::~AudioIO()
// wxTheApp->Yield();
mThread->Delete();
mThread.reset();
delete mThread;
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
delete mScrubQueue;
#endif
gAudioIO = nullptr;
}
void AudioIO::SetMixer(int inputSource)
@ -1974,19 +1971,18 @@ int AudioIO::StartStream(const WaveTrackArray &playbackTracks,
}
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
delete mScrubQueue;
if (scrubbing)
{
const auto &scrubOptions = *options.pScrubbingOptions;
mScrubQueue =
new ScrubQueue(mT0, mT1, scrubOptions.startClockTimeMillis,
std::make_unique<ScrubQueue>(mT0, mT1, scrubOptions.startClockTimeMillis,
sampleRate, 2 * scrubOptions.minStutter,
scrubOptions);
mScrubDuration = 0;
mSilentScrub = false;
}
else
mScrubQueue = NULL;
mScrubQueue.reset();
#endif
// We signal the audio thread to call FillBuffers, to prime the RingBuffers
@ -2117,11 +2113,7 @@ void AudioIO::StartStreamCleanup(bool bOnlyBuffers)
}
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
if (mScrubQueue)
{
delete mScrubQueue;
mScrubQueue = 0;
}
mScrubQueue.reset();
#endif
@ -2146,7 +2138,7 @@ void AudioIO::PrepareMidiIterator(bool send, double offset)
int nTracks = mMidiPlaybackTracks.size();
// instead of initializing with an Alg_seq, we use begin_seq()
// below to add ALL Alg_seq's.
mIterator = new Alg_iterator(NULL, false);
mIterator = std::make_unique<Alg_iterator>(nullptr, false);
// Iterator not yet intialized, must add each track...
for (i = 0; i < nTracks; i++) {
NoteTrack *t = mMidiPlaybackTracks[i];
@ -2405,8 +2397,7 @@ void AudioIO::StopStream()
seq->set_in_use(false);
}
delete mIterator;
mIterator = NULL; // just in case someone tries to reference it
mIterator.reset(); // just in case someone tries to reference it
mMidiPlaySpeed = 1.0;
}
#endif
@ -2546,11 +2537,7 @@ void AudioIO::StopStream()
mNumPlaybackChannels = 0;
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
if (mScrubQueue)
{
delete mScrubQueue;
mScrubQueue = 0;
}
mScrubQueue.reset();
#endif
if (mListener) {
@ -3858,8 +3845,7 @@ void AudioIO::GetNextEvent()
mNextEventTime = mT1 + mMidiLoopOffset - ALG_EPS;
mNextIsNoteOn = true; // do not look at duration
mIterator->end();
delete mIterator;
mIterator = NULL; // debugging aid
mIterator.reset(); // debugging aid
}
}

View File

@ -17,6 +17,7 @@
#include "Audacity.h"
#include "Experimental.h"
#include "MemoryX.h"
#include <vector>
#ifdef USE_MIDI
@ -61,7 +62,6 @@ using WaveTrackArray = std::vector < WaveTrack* >;
extern AUDACITY_DLL_API AudioIO *gAudioIO;
void InitAudioIO();
void DeinitAudioIO();
wxString DeviceName(const PaDeviceInfo* info);
wxString HostName(const PaDeviceInfo* info);
bool ValidateDeviceNames();
@ -515,7 +515,7 @@ private:
// begins.
Alg_seq_ptr mSeq;
Alg_iterator_ptr mIterator;
std::unique_ptr<Alg_iterator> mIterator;
Alg_event_ptr mNextEvent; // the next event to play (or null)
double mNextEventTime; // the time of the next event
// (note that this could be a note's time+duration)
@ -548,9 +548,9 @@ private:
unsigned short mAILALastChangeType; //0 - no change, 1 - increase change, 2 - decrease change
#endif
AudioThread *mThread;
std::unique_ptr<AudioThread> mThread;
#ifdef EXPERIMENTAL_MIDI_OUT
AudioThread *mMidiThread;
std::unique_ptr<AudioThread> mMidiThread;
#endif
Resample **mResample;
RingBuffer **mCaptureBuffers;
@ -638,7 +638,6 @@ private:
#endif
friend void InitAudioIO();
friend void DeinitAudioIO();
TimeTrack *mTimeTrack;
@ -685,7 +684,7 @@ private:
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
struct ScrubQueue;
ScrubQueue *mScrubQueue;
std::unique_ptr<ScrubQueue> mScrubQueue;
bool mSilentScrub;
long mScrubDuration;