casting of Track* to WaveTrack* happens at lower level in OD manager
This commit is contained in:
parent
03dc815aee
commit
af06691982
|
@ -2236,14 +2236,14 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult)
|
|||
else
|
||||
{
|
||||
// Replace mTracks entry with the NEW track
|
||||
WaveTrack *newTrack = static_cast<WaveTrack*>(o.get());
|
||||
auto newTrack = o.get();
|
||||
mTracks->Replace(t, std::move(o));
|
||||
|
||||
// If the track is a wave track,
|
||||
// Swap the wavecache track the ondemand task uses, since now the NEW
|
||||
// one will be kept in the project
|
||||
if (ODManager::IsInstanceCreated()) {
|
||||
ODManager::Instance()->ReplaceWaveTrack((WaveTrack *)t,
|
||||
newTrack);
|
||||
ODManager::Instance()->ReplaceWaveTrack( t, newTrack );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -381,12 +381,12 @@ void ODManager::RemoveWaveTrack(WaveTrack* track)
|
|||
}
|
||||
|
||||
///replace the wavetrack whose wavecache the gui watches for updates
|
||||
void ODManager::ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack)
|
||||
void ODManager::ReplaceWaveTrack(Track *oldTrack, Track *newTrack)
|
||||
{
|
||||
mQueuesMutex.Lock();
|
||||
for(unsigned int i=0;i<mQueues.size();i++)
|
||||
{
|
||||
mQueues[i]->ReplaceWaveTrack(oldTrack,newTrack);
|
||||
mQueues[i]->ReplaceWaveTrack( oldTrack, newTrack );
|
||||
}
|
||||
mQueuesMutex.Unlock();
|
||||
}
|
||||
|
|
|
@ -77,8 +77,9 @@ class ODManager final
|
|||
///Returns success if it was possible.. Some ODTask conditions make it impossible until the Tasks finish.
|
||||
bool MakeWaveTrackDependent(WaveTrack* dependentTrack,WaveTrack* masterTrack);
|
||||
|
||||
///if oldTrack is being watched,
|
||||
///replace the wavetrack whose wavecache the gui watches for updates
|
||||
void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
|
||||
void ReplaceWaveTrack(Track *oldTrack, Track *newTrack);
|
||||
|
||||
///Adds a task to the running queue. Threas-safe.
|
||||
void AddTask(ODTask* task);
|
||||
|
|
|
@ -355,14 +355,14 @@ void ODTask::StopUsingWaveTrack(WaveTrack* track)
|
|||
}
|
||||
|
||||
///Replaces all instances to a wavetrack with a NEW one, effectively transferring the task.
|
||||
void ODTask::ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack)
|
||||
void ODTask::ReplaceWaveTrack(Track *oldTrack, Track *newTrack)
|
||||
{
|
||||
mWaveTrackMutex.Lock();
|
||||
for(size_t i=0;i<mWaveTracks.size();i++)
|
||||
{
|
||||
if(oldTrack == mWaveTracks[i])
|
||||
{
|
||||
mWaveTracks[i] = newTrack;
|
||||
mWaveTracks[i] = static_cast<WaveTrack*>( newTrack );
|
||||
}
|
||||
}
|
||||
mWaveTrackMutex.Unlock();
|
||||
|
|
|
@ -84,7 +84,7 @@ class ODTask /* not final */
|
|||
|
||||
///Replaces all instances to a wavetrack with a NEW one, effectively transferring the task.
|
||||
///ODTask has no wavetrack, so it does nothing. But subclasses that do should override this.
|
||||
virtual void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
|
||||
virtual void ReplaceWaveTrack(Track *oldTrack, Track *newTrack);
|
||||
|
||||
///Adds a WaveTrack to do the task for
|
||||
void AddWaveTrack(WaveTrack* track);
|
||||
|
|
|
@ -20,6 +20,7 @@ tasks associated with a WaveTrack.
|
|||
#include "ODWaveTrackTaskQueue.h"
|
||||
#include "ODTask.h"
|
||||
#include "ODManager.h"
|
||||
#include "../WaveTrack.h"
|
||||
/// Constructs an ODWaveTrackTaskQueue
|
||||
ODWaveTrackTaskQueue::ODWaveTrackTaskQueue()
|
||||
{
|
||||
|
@ -205,19 +206,19 @@ void ODWaveTrackTaskQueue::DemandTrackUpdate(WaveTrack* track, double seconds)
|
|||
|
||||
|
||||
//Replaces all instances of a wavetracck with a NEW one (effectively transferes the task.)
|
||||
void ODWaveTrackTaskQueue::ReplaceWaveTrack(WaveTrack* oldTrack, WaveTrack* newTrack)
|
||||
void ODWaveTrackTaskQueue::ReplaceWaveTrack(Track *oldTrack, Track *newTrack)
|
||||
{
|
||||
if(oldTrack)
|
||||
{
|
||||
mTasksMutex.Lock();
|
||||
for(unsigned int i=0;i<mTasks.size();i++)
|
||||
mTasks[i]->ReplaceWaveTrack(oldTrack,newTrack);
|
||||
mTasks[i]->ReplaceWaveTrack( oldTrack, newTrack );
|
||||
mTasksMutex.Unlock();
|
||||
|
||||
mTracksMutex.Lock();
|
||||
for(unsigned int i=0;i<mTracks.size();i++)
|
||||
if(mTracks[i]==oldTrack)
|
||||
mTracks[i]=newTrack;
|
||||
mTracks[i] = static_cast<WaveTrack*>( newTrack );
|
||||
mTracksMutex.Unlock();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ tasks associated with a WaveTrack.
|
|||
#include <vector>
|
||||
#include "ODTaskThread.h"
|
||||
#include <wx/wx.h>
|
||||
class Track;
|
||||
class WaveTrack;
|
||||
class ODTask;
|
||||
/// A class representing a modular task to be used with the On-Demand structures.
|
||||
|
@ -52,7 +53,7 @@ class ODWaveTrackTaskQueue final
|
|||
void DemandTrackUpdate(WaveTrack* track, double seconds);
|
||||
|
||||
///replaces all instances of a WaveTrack within this task with another.
|
||||
void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
|
||||
void ReplaceWaveTrack(Track *oldTrack, Track *newTrack);
|
||||
|
||||
//if the wavetrack is in this queue, and is not the only wavetrack, clones the tasks and schedules it.
|
||||
void MakeWaveTrackIndependent(WaveTrack* track);
|
||||
|
|
Loading…
Reference in New Issue