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:
parent
27527ebf5c
commit
b47bcb548e
@ -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();
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user