1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-20 14:20:06 +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(); DeinitFFT();
DeinitAudioIO();
// Terminate the PluginManager (must be done before deleting the locale) // Terminate the PluginManager (must be done before deleting the locale)
PluginManager::Get().Terminate(); PluginManager::Get().Terminate();

View File

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

View File

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