Audacity  3.0.3
ODTask.h
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  ODTask.h
6 
7  Created by Michael Chinen (mchinen)
8  Audacity(R) is copyright (c) 1999-2008 Audacity Team.
9  License: GPL v2. See License.txt.
10 
11 ******************************************************************//*******************************************************************/
19 
20 
21 
22 
23 #ifndef __AUDACITY_ODTASK__
24 #define __AUDACITY_ODTASK__
25 
26 #include "../BlockFile.h"
27 
28 #include <vector>
29 #include <wx/event.h> // to declare custom event type
30 class AudacityProject;
31 class Track;
32 class WaveTrack;
33 
34 
35 wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API,
36  EVT_ODTASK_COMPLETE, wxCommandEvent);
37 
39 class ODTask /* not final */
40 {
41  public:
42  enum {
43  eODNone = 0x00000000,
44  eODFLAC = 0x00000001,
45  eODMP3 = 0x00000002,
46  eODFFMPEG = 0x00000004,
47  eODPCMSummary = 0x00001000,
48  eODOTHER = 0x10000000,
50  // Constructor / Destructor
51 
53  ODTask();
54 
55  virtual ~ODTask(){};
56 
57  //clones everything except information about the tracks.
58  virtual std::unique_ptr<ODTask> Clone() const = 0;
59 
61  virtual unsigned int GetODType(){return eODNone;}
62 
63 
68  void DoSome(float amountWork=0.0);
69 
71  void DoAll();
72 
73  virtual float PercentComplete();
74 
75  virtual bool UsesCustomWorkUntilPercentage(){return false;}
76  virtual float ComputeNextWorkUntilPercentageComplete(){return 1.0;}
77 
81  virtual bool CanMergeWith(ODTask* otherTask){return strcmp(GetTaskName(),otherTask->GetTaskName())==0;}
82 
83  virtual void StopUsingWaveTrack(WaveTrack* track);
84 
87  virtual void ReplaceWaveTrack(Track *oldTrack,
88  const std::shared_ptr< Track > &newTrack);
89 
91  void AddWaveTrack( const std::shared_ptr< WaveTrack > &track);
92  virtual int GetNumWaveTracks();
93  virtual std::shared_ptr< WaveTrack > GetWaveTrack(int i);
94 
96  virtual void DemandTrackUpdate(WaveTrack* track, double seconds);
97 
98  bool IsComplete();
99 
100  void TerminateAndBlock();
102  virtual void Terminate(){}
103 
104  virtual const char* GetTaskName(){return "ODTask";}
105 
106  virtual sampleCount GetDemandSample() const;
107 
108  virtual void SetDemandSample(sampleCount sample);
109 
111  virtual void RecalculatePercentComplete();
112 
114  int GetTaskNumber(){return mTaskNumber;}
115 
116  void SetNeedsODUpdate();
117  bool GetNeedsODUpdate();
118  void ResetNeedsODUpdate();
119 
121 
123  virtual bool IsTaskAssociatedWithProject(AudacityProject* proj);
124 
125  bool IsRunning();
126 
127 
128  protected:
129 
131  virtual void CalculatePercentComplete() = 0;
132 
136  virtual void DoSomeInternal() = 0;
137 
139  virtual void Update(){}
140 
144  virtual void ODUpdate();
145 
146  void SetIsRunning(bool value);
147 
148 
149 
151  volatile float mPercentComplete;
153  volatile bool mDoingTask;
154  volatile bool mTaskStarted;
155  volatile bool mTerminate;
157  //for a function not a member var.
159 
160  std::vector< std::weak_ptr< WaveTrack > > mWaveTracks;
162 
165 
166  volatile bool mIsRunning;
168 
169 
170  private:
171 
172  volatile bool mNeedsODUpdate;
174 
175 
176 
177 };
178 
179 #endif
180 
ODTask::ReplaceWaveTrack
virtual void ReplaceWaveTrack(Track *oldTrack, const std::shared_ptr< Track > &newTrack)
Replaces all instances to a wavetrack with a NEW one, effectively transferring the task.
Definition: ODTask.cpp:352
TranslatableString
Holds a msgid for the translation catalog; may also bind format arguments.
Definition: TranslatableString.h:32
ODTask::~ODTask
virtual ~ODTask()
Definition: ODTask.h:55
WaveTrack
A Track that contains audio waveform data.
Definition: WaveTrack.h:69
ODTask::SetNeedsODUpdate
void SetNeedsODUpdate()
Definition: ODTask.cpp:283
ODTask::DemandTrackUpdate
virtual void DemandTrackUpdate(WaveTrack *track, double seconds)
changes the tasks associated with this Waveform to process the task from a different point in the tra...
Definition: ODTask.cpp:318
ODTask::GetTaskNumber
int GetTaskNumber()
returns the number of tasks created before this instance.
Definition: ODTask.h:114
ODTask::GetTaskName
virtual const char * GetTaskName()
Definition: ODTask.h:104
ODTask::GetTip
virtual TranslatableString GetTip()=0
ODTask::mIsRunning
volatile bool mIsRunning
Definition: ODTask.h:166
ODTask::AddWaveTrack
void AddWaveTrack(const std::shared_ptr< WaveTrack > &track)
Adds a WaveTrack to do the task for.
Definition: ODTask.cpp:267
ODTask::eODMP3
@ eODMP3
Definition: ODTask.h:45
ODTask::Clone
virtual std::unique_ptr< ODTask > Clone() const =0
ODTask::ODTypeEnum
enum ODTask::@0 ODTypeEnum
ODTask::IsTaskAssociatedWithProject
virtual bool IsTaskAssociatedWithProject(AudacityProject *proj)
returns true if the task is associated with the project.
Definition: ODTask.cpp:176
ODTask::UsesCustomWorkUntilPercentage
virtual bool UsesCustomWorkUntilPercentage()
Definition: ODTask.h:75
ODTask::eODOTHER
@ eODOTHER
Definition: ODTask.h:48
ODTask::eODNone
@ eODNone
Definition: ODTask.h:43
wxDECLARE_EXPORTED_EVENT
wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_ODTASK_COMPLETE, wxCommandEvent)
ODTask::RecalculatePercentComplete
virtual void RecalculatePercentComplete()
does an od update and then recalculates the data.
Definition: ODTask.cpp:306
ODTask::mDemandSampleMutex
ODLock mDemandSampleMutex
Definition: ODTask.h:164
ODTask::GetNeedsODUpdate
bool GetNeedsODUpdate()
Definition: ODTask.cpp:289
ODTask::eODFFMPEG
@ eODFFMPEG
Definition: ODTask.h:46
ODTask::IsRunning
bool IsRunning()
Definition: ODTask.cpp:212
ODTask::PercentComplete
virtual float PercentComplete()
return the amount of the task that has been completed. 0.0 to 1.0
Definition: ODTask.cpp:240
ODTask::mPercentCompleteMutex
ODLock mPercentCompleteMutex
Definition: ODTask.h:152
ODTask::mWaveTracks
std::vector< std::weak_ptr< WaveTrack > > mWaveTracks
Definition: ODTask.h:160
ODTask::ComputeNextWorkUntilPercentageComplete
virtual float ComputeNextWorkUntilPercentageComplete()
Definition: ODTask.h:76
ODTask::CalculatePercentComplete
virtual void CalculatePercentComplete()=0
calculates the percentage complete from existing data.
ODTask::CanMergeWith
virtual bool CanMergeWith(ODTask *otherTask)
Definition: ODTask.h:81
ODTask::mTaskStarted
volatile bool mTaskStarted
Definition: ODTask.h:154
ODTask::IsComplete
bool IsComplete()
return
Definition: ODTask.cpp:249
ODTask::mWaveTrackMutex
ODLock mWaveTrackMutex
Definition: ODTask.h:161
ODTask::DoAll
void DoAll()
Call DoSome until PercentComplete >= 1.0.
ODTask::mTerminate
volatile bool mTerminate
Definition: ODTask.h:155
ODTask::TerminateAndBlock
void TerminateAndBlock()
Definition: ODTask.cpp:50
ODTask::Terminate
virtual void Terminate()
releases memory that the ODTask owns. Subclasses should override.
Definition: ODTask.h:102
ODTask::mNeedsODUpdate
volatile bool mNeedsODUpdate
Definition: ODTask.h:172
ODTask
A class representing a modular task to be used with the On-Demand structures.
Definition: ODTask.h:40
ODTask::mTerminateMutex
ODLock mTerminateMutex
Definition: ODTask.h:156
ODTask::ODTask
ODTask()
Constructs an ODTask.
Definition: ODTask.cpp:35
ODLock
Definition: ODTaskThread.h:89
ODTask::ResetNeedsODUpdate
void ResetNeedsODUpdate()
Definition: ODTask.cpp:298
Track
Abstract base class for an object holding data associated with points on a time axis.
Definition: Track.h:239
ODTask::mDoingTask
volatile bool mDoingTask
Definition: ODTask.h:153
ODTask::Update
virtual void Update()
virtual method called before DoSomeInternal is used from DoSome.
Definition: ODTask.h:139
sampleCount
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:18
AudacityProject
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:92
ODTask::mPercentComplete
volatile float mPercentComplete
Definition: ODTask.h:151
ODTask::GetNumWaveTracks
virtual int GetNumWaveTracks()
Definition: ODTask.cpp:273
ODTask::eODFLAC
@ eODFLAC
Definition: ODTask.h:44
ODTask::GetDemandSample
virtual sampleCount GetDemandSample() const
Definition: ODTask.cpp:221
ODTask::mTaskNumber
int mTaskNumber
Definition: ODTask.h:150
ODTask::SetIsRunning
void SetIsRunning(bool value)
Definition: ODTask.cpp:205
ODTask::SetDemandSample
virtual void SetDemandSample(sampleCount sample)
Definition: ODTask.cpp:230
ODTask::GetWaveTrack
virtual std::shared_ptr< WaveTrack > GetWaveTrack(int i)
Definition: ODTask.cpp:255
ODTask::mIsRunningMutex
ODLock mIsRunningMutex
Definition: ODTask.h:167
ODTask::eODPCMSummary
@ eODPCMSummary
Definition: ODTask.h:47
ODTask::DoSomeInternal
virtual void DoSomeInternal()=0
ODTask::StopUsingWaveTrack
virtual void StopUsingWaveTrack(WaveTrack *track)
Definition: ODTask.cpp:340
ODTask::mDemandSample
sampleCount mDemandSample
Definition: ODTask.h:163
ODTask::mBlockUntilTerminateMutex
ODLock mBlockUntilTerminateMutex
Definition: ODTask.h:158
ODTask::mNeedsODUpdateMutex
ODLock mNeedsODUpdateMutex
Definition: ODTask.h:173
ODTask::DoSome
void DoSome(float amountWork=0.0)
Definition: ODTask.cpp:71
ODTask::GetODType
virtual unsigned int GetODType()
Subclasses should override to return respective type.
Definition: ODTask.h:61
ODTask::ODUpdate
virtual void ODUpdate()
Definition: ODTask.cpp:199