/********************************************************************** Audacity: A Digital Audio Editor ODComputeSummaryTask.h Created by Michael Chinen (mchinen) on 6/8/08. Audacity(R) is copyright (c) 1999-2008 Audacity Team. License: GPL v2. See License.txt. ******************************************************************//** \class ODComputeSummaryTask \brief Computes the summary data for a PCM (WAV) file and writes it to disk, updating the ODPCMAliasBlockFile and the GUI of the newly available data. *//*******************************************************************/ #ifndef __AUDACITY_ODComputeSummaryTask__ #define __AUDACITY_ODComputeSummaryTask__ #include #include "ODTask.h" #include "ODTaskThread.h" class ODPCMAliasBlockFile; class WaveTrack; /// A class representing a modular task to be used with the On-Demand structures. class ODComputeSummaryTask:public ODTask { public: // Constructor / Destructor /// Constructs an ODTask ODComputeSummaryTask(); virtual ~ODComputeSummaryTask(){}; virtual ODTask* Clone(); ///Subclasses should override to return respective type. virtual unsigned int GetODType(){return eODPCMSummary;} ///Return the task name virtual const char* GetTaskName(){return "ODComputeSummaryTask";} virtual const wxChar* GetTip(){return _("Import complete. Calculating waveform");} virtual bool UsesCustomWorkUntilPercentage(){return true;} virtual float ComputeNextWorkUntilPercentageComplete(); ///releases memory that the ODTask owns. Subclasses should override. virtual void Terminate(); protected: ///recalculates the percentage complete. virtual void CalculatePercentComplete(); ///Computes and writes the data for one BlockFile if it still has a refcount. virtual void DoSomeInternal(); ///Readjusts the blockfile order in the default manner. If we have had an ODRequest ///Then it updates in the OD manner. virtual void Update(); ///Orders the input as either On-Demand or default layered order. void OrderBlockFiles(std::vector &unorderedBlocks); ///tells us whether or not Update has been run at least once. void MarkUpdateRan(); bool HasUpdateRan(); //mBlockFiles is touched on several threads- the OD terminate thread, and the task thread, so we need to mutex it. ODLock mBlockFilesMutex; std::vector mBlockFiles; int mMaxBlockFiles; int mComputedBlockFiles; ODLock mHasUpdateRanMutex; bool mHasUpdateRan; }; #endif