From e599cfa6fa6294cba6b871f5353cdfdfcfdbe604 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 13 Aug 2016 09:26:53 -0400 Subject: [PATCH] Effect::mOutputTracks is managed by smart pointer --- src/effects/AutoDuck.cpp | 2 +- src/effects/ChangeSpeed.cpp | 2 +- src/effects/ClickRemoval.cpp | 2 +- src/effects/Effect.cpp | 30 +++++++----------------------- src/effects/Effect.h | 2 +- src/effects/Equalization.cpp | 2 +- src/effects/Equalization48x.cpp | 11 ++++++++--- src/effects/Generator.cpp | 2 +- src/effects/NoiseReduction.cpp | 2 +- src/effects/NoiseRemoval.cpp | 2 +- src/effects/Normalize.cpp | 2 +- src/effects/Paulstretch.cpp | 2 +- src/effects/Repair.cpp | 2 +- src/effects/Repeat.cpp | 2 +- src/effects/Reverse.cpp | 2 +- src/effects/SBSMSEffect.cpp | 2 +- src/effects/SimpleMono.cpp | 2 +- src/effects/SoundTouchEffect.cpp | 2 +- src/effects/StereoToMono.cpp | 2 +- src/effects/TruncSilence.cpp | 10 +++++----- src/effects/TwoPassSimpleMono.cpp | 2 +- src/effects/nyquist/Nyquist.cpp | 10 +++++----- 22 files changed, 43 insertions(+), 54 deletions(-) diff --git a/src/effects/AutoDuck.cpp b/src/effects/AutoDuck.cpp index 96dfc26d1..c62d92f90 100644 --- a/src/effects/AutoDuck.cpp +++ b/src/effects/AutoDuck.cpp @@ -384,7 +384,7 @@ bool EffectAutoDuck::Process() if (!cancel) { CopyInputTracks(); // Set up mOutputTracks. - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); Track *iterTrack = iter.First(); int trackNumber = 0; diff --git a/src/effects/ChangeSpeed.cpp b/src/effects/ChangeSpeed.cpp index 8c1cf8c25..422766dab 100644 --- a/src/effects/ChangeSpeed.cpp +++ b/src/effects/ChangeSpeed.cpp @@ -218,7 +218,7 @@ bool EffectChangeSpeed::Process() CopyInputTracks(Track::All); // Set up mOutputTracks. bool bGoodResult = true; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t; mCurTrackNum = 0; mMaxNewLength = 0.0; diff --git a/src/effects/ClickRemoval.cpp b/src/effects/ClickRemoval.cpp index 1c5587f36..c300c6336 100644 --- a/src/effects/ClickRemoval.cpp +++ b/src/effects/ClickRemoval.cpp @@ -162,7 +162,7 @@ bool EffectClickRemoval::Process() bool bGoodResult = true; mbDidSomething = false; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 485aefedc..39438add7 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -94,7 +94,6 @@ Effect::Effect() mWarper = NULL; mTracks = NULL; - mOutputTracks = NULL; mOutputTracksType = Track::None; mT0 = 0.0; mT1 = 0.0; @@ -136,11 +135,6 @@ Effect::Effect() Effect::~Effect() { - if (mOutputTracks) - { - delete mOutputTracks; - } - if (mUIDialog) { mUIDialog->Close(); @@ -1168,11 +1162,7 @@ bool Effect::DoEffect(wxWindow *parent, { wxASSERT(selectedRegion->duration() >= 0.0); - if (mOutputTracks) - { - delete mOutputTracks; - mOutputTracks = NULL; - } + mOutputTracks.reset(); mFactory = factory; mProjectRate = projectRate; @@ -1244,11 +1234,7 @@ bool Effect::DoEffect(wxWindow *parent, End(); - if (mOutputTracks) - { - delete mOutputTracks; - mOutputTracks = NULL; - } + mOutputTracks.reset(); if (returnVal) { @@ -1327,7 +1313,7 @@ bool Effect::ProcessPass() mBufferSize = 0; mBlockSize = 0; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); int count = 0; bool clear = false; Track* t = iter.First(); @@ -2079,7 +2065,7 @@ void Effect::CopyInputTracks(int trackType) mIMap.Clear(); mOMap.Clear(); - mOutputTracks = new TrackList(); + mOutputTracks = std::make_unique(); mOutputTracksType = trackType; //iterate over tracks of type trackType (All types if Track::All) @@ -2201,7 +2187,7 @@ auto Effect::ModifyAnalysisTrack // Else clear and DELETE mOutputTracks copies. void Effect::ReplaceProcessedTracks(const bool bGoodResult) { - wxASSERT(mOutputTracks != NULL); // Make sure we at least did the CopyInputTracks(). + wxASSERT(mOutputTracks); // Make sure we at least did the CopyInputTracks(). if (!bGoodResult) { // Processing failed or was cancelled so throw away the processed tracks. @@ -2277,8 +2263,7 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult) wxASSERT(mOutputTracks->empty()); // The output list is no longer needed - delete mOutputTracks; - mOutputTracks = NULL; + mOutputTracks.reset(); mOutputTracksType = Track::None; } @@ -2665,8 +2650,7 @@ void Effect::Preview(bool dryOnly) FocusDialog->SetFocus(); } - delete mOutputTracks; - mOutputTracks = NULL; + mOutputTracks.reset(); mTracks->Clear(); delete mTracks; diff --git a/src/effects/Effect.h b/src/effects/Effect.h index bf350d5da..9debae0ca 100644 --- a/src/effects/Effect.h +++ b/src/effects/Effect.h @@ -439,7 +439,7 @@ protected: double mSampleRate; TrackFactory *mFactory; TrackList *mTracks; // the complete list of all tracks - TrackList *mOutputTracks; // used only if CopyInputTracks() is called. + std::unique_ptr mOutputTracks; // used only if CopyInputTracks() is called. double mT0; double mT1; #ifdef EXPERIMENTAL_SPECTRAL_EDITING diff --git a/src/effects/Equalization.cpp b/src/effects/Equalization.cpp index 80252128a..f527bfd60 100644 --- a/src/effects/Equalization.cpp +++ b/src/effects/Equalization.cpp @@ -538,7 +538,7 @@ bool EffectEqualization::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Equalization48x.cpp b/src/effects/Equalization48x.cpp index b7799d7da..8be27a314 100644 --- a/src/effects/Equalization48x.cpp +++ b/src/effects/Equalization48x.cpp @@ -353,7 +353,10 @@ bool EffectEqualization48x::TrackCompare() } for(int i=0;i<2;i++) { - SelectedTrackListOfKindIterator iter(Track::Wave, i ? mEffectEqualization->mOutputTracks : &SecondOutputTracks); + SelectedTrackListOfKindIterator iter + (Track::Wave, i + ? mEffectEqualization->mOutputTracks.get() + : &SecondOutputTracks); i?sMathPath=sMathPath:sMathPath=0; WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; @@ -375,7 +378,8 @@ bool EffectEqualization48x::TrackCompare() count++; } } - SelectedTrackListOfKindIterator iter(Track::Wave, mEffectEqualization->mOutputTracks); + SelectedTrackListOfKindIterator + iter(Track::Wave, mEffectEqualization->mOutputTracks.get()); SelectedTrackListOfKindIterator iter2(Track::Wave, &SecondOutputTracks); WaveTrack *track = (WaveTrack *) iter.First(); WaveTrack *track2 = (WaveTrack *) iter2.First(); @@ -440,7 +444,8 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization) if(sMathPath) // !!! Filter MUST BE QUAD WORD ALIGNED !!!! mEffectEqualization->mM=(mEffectEqualization->mM&(~15))+1; AllocateBuffersWorkers(MATH_FUNCTION_THREADED); - SelectedTrackListOfKindIterator iter(Track::Wave, mEffectEqualization->mOutputTracks); + SelectedTrackListOfKindIterator + iter(Track::Wave, mEffectEqualization->mOutputTracks.get()); long times[] = { 0,0,0,0,0 }; wxStopWatch timer; mBenching=true; diff --git a/src/effects/Generator.cpp b/src/effects/Generator.cpp index d36f131cb..4d70e284f 100644 --- a/src/effects/Generator.cpp +++ b/src/effects/Generator.cpp @@ -37,7 +37,7 @@ bool Generator::Process() // Iterate over the tracks bool bGoodResult = true; int ntrack = 0; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t = iter.First(); while (t != NULL) diff --git a/src/effects/NoiseReduction.cpp b/src/effects/NoiseReduction.cpp index e3e28bb1e..15a1b1396 100644 --- a/src/effects/NoiseReduction.cpp +++ b/src/effects/NoiseReduction.cpp @@ -600,7 +600,7 @@ bool EffectNoiseReduction::Process() this->CopyInputTracks(); // Set up mOutputTracks. - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); if (!track) return false; diff --git a/src/effects/NoiseRemoval.cpp b/src/effects/NoiseRemoval.cpp index a4ff604f6..793fe7360 100644 --- a/src/effects/NoiseRemoval.cpp +++ b/src/effects/NoiseRemoval.cpp @@ -212,7 +212,7 @@ bool EffectNoiseRemoval::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Normalize.cpp b/src/effects/Normalize.cpp index bb572b042..481515d1a 100644 --- a/src/effects/Normalize.cpp +++ b/src/effects/Normalize.cpp @@ -159,7 +159,7 @@ bool EffectNormalize::Process() //Iterate over each track this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); WaveTrack *prevTrack; prevTrack = track; diff --git a/src/effects/Paulstretch.cpp b/src/effects/Paulstretch.cpp index 384da80ef..9b33ff252 100644 --- a/src/effects/Paulstretch.cpp +++ b/src/effects/Paulstretch.cpp @@ -150,7 +150,7 @@ double EffectPaulstretch::CalcPreviewInputLength(double previewLength) bool EffectPaulstretch::Process() { CopyInputTracks(); - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); m_t1=mT1; int count=0; diff --git a/src/effects/Repair.cpp b/src/effects/Repair.cpp index 80b57d2ed..6b1167305 100644 --- a/src/effects/Repair.cpp +++ b/src/effects/Repair.cpp @@ -74,7 +74,7 @@ bool EffectRepair::Process() this->CopyInputTracks(); // Set up mOutputTracks. //v This may be too much copying for EffectRepair. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); int count = 0; while (track) { diff --git a/src/effects/Repeat.cpp b/src/effects/Repeat.cpp index e5cf0534c..dbfa6ba70 100644 --- a/src/effects/Repeat.cpp +++ b/src/effects/Repeat.cpp @@ -104,7 +104,7 @@ bool EffectRepeat::Process() bool bGoodResult = true; double maxDestLen = 0.0; // used to change selection to generated bit - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); for (Track *t = iter.First(); t && bGoodResult; t = iter.Next()) { diff --git a/src/effects/Reverse.cpp b/src/effects/Reverse.cpp index d5f246416..4333efdd9 100644 --- a/src/effects/Reverse.cpp +++ b/src/effects/Reverse.cpp @@ -68,7 +68,7 @@ bool EffectReverse::Process() this->CopyInputTracks(Track::All); // Set up mOutputTracks. bool bGoodResult = true; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track *t = iter.First(); int count = 0; while (t) { diff --git a/src/effects/SBSMSEffect.cpp b/src/effects/SBSMSEffect.cpp index 0cd4e72bf..27279dbb2 100644 --- a/src/effects/SBSMSEffect.cpp +++ b/src/effects/SBSMSEffect.cpp @@ -209,7 +209,7 @@ bool EffectSBSMS::Process() //Iterate over each track //Track::All is needed because this effect needs to introduce silence in the group tracks to keep sync this->CopyInputTracks(Track::All); // Set up mOutputTracks. - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t; mCurTrackNum = 0; diff --git a/src/effects/SimpleMono.cpp b/src/effects/SimpleMono.cpp index 72f8d33a1..25468ff33 100644 --- a/src/effects/SimpleMono.cpp +++ b/src/effects/SimpleMono.cpp @@ -32,7 +32,7 @@ bool EffectSimpleMono::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack* pOutWaveTrack = (WaveTrack*)(iter.First()); mCurTrackNum = 0; while (pOutWaveTrack != NULL) diff --git a/src/effects/SoundTouchEffect.cpp b/src/effects/SoundTouchEffect.cpp index 333c0074c..6f7dc52eb 100644 --- a/src/effects/SoundTouchEffect.cpp +++ b/src/effects/SoundTouchEffect.cpp @@ -64,7 +64,7 @@ bool EffectSoundTouch::Process() this->CopyInputTracks(Track::All); bool bGoodResult = true; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); Track* t; mCurTrackNum = 0; m_maxNewLength = 0.0; diff --git a/src/effects/StereoToMono.cpp b/src/effects/StereoToMono.cpp index 31debcd97..288ac17c0 100644 --- a/src/effects/StereoToMono.cpp +++ b/src/effects/StereoToMono.cpp @@ -75,7 +75,7 @@ bool EffectStereoToMono::Process() this->CopyInputTracks(); // Set up mOutputTracks. bool bGoodResult = true; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); mLeftTrack = (WaveTrack *)iter.First(); bool refreshIter = false; diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index 1be71cfa2..c97d8b266 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -305,7 +305,7 @@ bool EffectTruncSilence::ProcessIndependently() { unsigned iGroup = 0; - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); for (Track *track = iter.First(); track; ++iGroup, track = iter.Next(true) // skip linked tracks ) { @@ -314,12 +314,12 @@ bool EffectTruncSilence::ProcessIndependently() RegionList silences; - if (!FindSilences(silences, mOutputTracks, track, last)) + if (!FindSilences(silences, mOutputTracks.get(), track, last)) return false; // Treat tracks in the sync lock group only Track *groupFirst, *groupLast; if (syncLock) { - SyncLockedTracksIterator syncIter(mOutputTracks); + SyncLockedTracksIterator syncIter(mOutputTracks.get()); groupFirst = syncIter.StartWith(track); groupLast = syncIter.Last(); } @@ -350,7 +350,7 @@ bool EffectTruncSilence::ProcessAll() SelectedTrackListOfKindIterator iter(Track::Wave, mTracks); if (FindSilences(silences, mTracks, iter.First(), iter.Last())) { - TrackListIterator iterOut(mOutputTracks); + TrackListIterator iterOut(mOutputTracks.get()); double totalCutLen = 0.0; Track *const first = iterOut.First(); if (DoRemoval(silences, 0, 1, first, iterOut.Last(), totalCutLen)) { @@ -469,7 +469,7 @@ bool EffectTruncSilence::DoRemoval double cutLen = inLength - outLength; totalCutLen += cutLen; - TrackListIterator iterOut(mOutputTracks); + TrackListIterator iterOut(mOutputTracks.get()); bool lastSeen = false; for (Track *t = iterOut.StartWith(firstTrack); t && !lastSeen; t = iterOut.Next()) { diff --git a/src/effects/TwoPassSimpleMono.cpp b/src/effects/TwoPassSimpleMono.cpp index d1dbefd6e..4c3362d2f 100644 --- a/src/effects/TwoPassSimpleMono.cpp +++ b/src/effects/TwoPassSimpleMono.cpp @@ -47,7 +47,7 @@ bool EffectTwoPassSimpleMono::Process() bool EffectTwoPassSimpleMono::ProcessPass() { //Iterate over each track - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); WaveTrack *track = (WaveTrack *) iter.First(); mCurTrackNum = 0; while (track) { diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 796636deb..54e68c804 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -456,7 +456,7 @@ bool NyquistEffect::Process() // correct sync-lock group behavior when the timeline is affected; then we just want // to operate on the selected wave tracks CopyInputTracks(Track::All); - SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get()); mCurTrack[0] = (WaveTrack *) iter.First(); mOutputTime = 0; mCount = 0; @@ -472,7 +472,7 @@ bool NyquistEffect::Process() mTrackIndex = 0; mNumSelectedChannels = 0; - SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks); + SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks.get()); for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) { mNumSelectedChannels++; if (mT1 >= mT0) { @@ -620,7 +620,7 @@ bool NyquistEffect::Process() } // Check whether we're in the same group as the last selected track - SyncLockedTracksIterator gIter(mOutputTracks); + SyncLockedTracksIterator gIter(mOutputTracks.get()); Track *gt = gIter.StartWith(mCurTrack[0]); mFirstInGroup = !gtLast || (gtLast != gt); gtLast = gt; @@ -1110,7 +1110,7 @@ bool NyquistEffect::ProcessOne() unsigned int l; LabelTrack *ltrack = NULL; - TrackListIterator iter(mOutputTracks); + TrackListIterator iter(mOutputTracks.get()); for (Track *t = iter.First(); t; t = iter.Next()) { if (t->GetKind() == Track::Label) { ltrack = (LabelTrack *)t; @@ -1225,7 +1225,7 @@ bool NyquistEffect::ProcessOne() // If we were first in the group adjust non-selected group tracks if (mFirstInGroup) { - SyncLockedTracksIterator git(mOutputTracks); + SyncLockedTracksIterator git(mOutputTracks.get()); Track *t; for (t = git.StartWith(mCurTrack[i]); t; t = git.Next()) {