Audacity  3.0.3
ODPCMAliasBlockFile.h
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  ODPCMAliasBlockFile.cpp
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 ******************************************************************//*******************************************************************/
30 
31 
32 
33 
34 
35 
36 #ifndef __AUDACITY_ODPCMALIASBLOCKFILE__
37 #define __AUDACITY_ODPCMALIASBLOCKFILE__
38 
39 #include "PCMAliasBlockFile.h"
40 
43 {
44  public:
47  wxFileNameWrapper &&aliasedFileName, sampleCount aliasStart,
48  size_t aliasLen, int aliasChannel);
49  ODPCMAliasBlockFile(wxFileNameWrapper &&existingSummaryFileName,
50  wxFileNameWrapper &&aliasedFileName, sampleCount aliasStart,
51  size_t aliasLen, int aliasChannel,
52  float min, float max, float rms, bool summaryAvailable);
53  virtual ~ODPCMAliasBlockFile();
54 
55  //checks to see if summary data has been computed and written to disk yet. Thread safe. Blocks if we are writing summary data.
56  bool IsSummaryAvailable() const override;
57 
59  bool IsSummaryBeingComputed() override { return mSummaryBeingComputed; }
60 
61  //Calls that rely on summary files need to be overridden
62  DiskByteCount GetSpaceUsage() const override;
65  size_t start, size_t len, bool mayThrow) const override;
67  MinMaxRMS GetMinMaxRMS(bool mayThrow) const override;
69  bool Read256(float *buffer, size_t start, size_t len) override;
71  bool Read64K(float *buffer, size_t start, size_t len) override;
72 
74  BlockFilePtr Copy(wxFileNameWrapper &&fileName) override;
75 
77  void SaveXML(XMLWriter &xmlFile) override;
78 
80  static BlockFilePtr BuildFromXML(DirManager &dm, const wxChar **attrs);
81 
83  void Recover(void) override;
84 
86  void DoWriteSummary();
87 
89  void SetStart(sampleCount startSample){mStart = startSample;}
90 
92  sampleCount GetStart() const {return mStart;}
93 
95  void Lock() override;
96 
98  void Unlock() override;
99 
101  void SetClipOffset(sampleCount numSamples){mClipOffset= numSamples;}
102 
105 
106  //returns the number of samples from the beginning of the track that this blockfile starts at
108 
109  //returns the number of samples from the beginning of the track that this blockfile ends at
110  sampleCount GetGlobalEnd() const {return mClipOffset+mStart+GetLength();}
111 
112 
113  //Below calls are overridden just so we can take wxlog calls out, which are not threadsafe.
114 
116  size_t ReadData(samplePtr data, sampleFormat format,
117  size_t start, size_t len, bool mayThrow) const override;
118 
120  bool ReadSummary(ArrayOf<char> &data) override;
121 
123  void SetFileName(wxFileNameWrapper &&name) override;
124  GetFileNameResult GetFileName() const override;
125 
126  //when the file closes, it locks the blockfiles, but only conditionally.
127  // It calls this so we can check if it has been saved before.
128  // not balanced by unlocking calls.
129  void CloseLock() override;
130 
132  void LockRead() const override;
134  void UnlockRead() const override;
135 
136 protected:
137  void WriteSummary() override;
138  void *CalcSummary(samplePtr buffer, size_t len,
139  sampleFormat format, ArrayOf<char> &cleanup) override;
140 
141  private:
142 
144 
145  //need to protect this since it is changed from the main thread upon save.
147 
150 
151  //lock the read data - libsndfile can't handle two reads at once?
153 
158 
161 
164 };
165 
166 #endif
167 
XMLWriter
Base class for XMLFileWriter and XMLStringWriter that provides the general functionality for creating...
Definition: XMLWriter.h:23
ODPCMAliasBlockFile::mReadDataMutex
ODLock mReadDataMutex
Definition: ODPCMAliasBlockFile.h:152
ODPCMAliasBlockFile
An AliasBlockFile that references uncompressed data in an existing file.
Definition: ODPCMAliasBlockFile.h:43
ODPCMAliasBlockFile::mStart
sampleCount mStart
for reporting after task is complete. Only for display use.
Definition: ODPCMAliasBlockFile.h:160
wxFileNameWrapper
Definition: wxFileNameWrapper.h:21
ODPCMAliasBlockFile::mAliasedFileNameMutex
ODLock mAliasedFileNameMutex
Also need to protect the aliased file name.
Definition: ODPCMAliasBlockFile.h:149
ODPCMAliasBlockFile::Copy
BlockFilePtr Copy(wxFileNameWrapper &&fileName) override
Makes NEW ODPCMAliasBlockFile or PCMAliasBlockFile depending on summary availability.
Definition: ODPCMAliasBlockFile.cpp:201
ODPCMAliasBlockFile::ReadData
size_t ReadData(samplePtr data, sampleFormat format, size_t start, size_t len, bool mayThrow) const override
Reads the specified data from the aliased file using libsndfile.
Definition: ODPCMAliasBlockFile.cpp:493
ODPCMAliasBlockFile::GetSpaceUsage
DiskByteCount GetSpaceUsage() const override
Definition: ODPCMAliasBlockFile.cpp:77
ODPCMAliasBlockFile::IsSummaryAvailable
bool IsSummaryAvailable() const override
Definition: ODPCMAliasBlockFile.cpp:342
PCMAliasBlockFile
An AliasBlockFile that references uncompressed data in an existing file.
Definition: PCMAliasBlockFile.h:20
ODPCMAliasBlockFile::ODPCMAliasBlockFile
ODPCMAliasBlockFile(wxFileNameWrapper &&baseFileName, wxFileNameWrapper &&aliasedFileName, sampleCount aliasStart, size_t aliasLen, int aliasChannel)
Constructs a PCMAliasBlockFile, writing the summary to disk.
Definition: ODPCMAliasBlockFile.cpp:44
ODPCMAliasBlockFile::mSummaryBeingComputed
bool mSummaryBeingComputed
Definition: ODPCMAliasBlockFile.h:156
MinMaxRMS
Definition: SampleBlock.h:32
ODPCMAliasBlockFile::DoWriteSummary
void DoWriteSummary()
A public interface to WriteSummary.
Definition: ODPCMAliasBlockFile.cpp:352
ODPCMAliasBlockFile::IsSummaryBeingComputed
bool IsSummaryBeingComputed() override
Returns TRUE if the summary has not yet been written, but is actively being computed and written to d...
Definition: ODPCMAliasBlockFile.h:59
ODPCMAliasBlockFile::mHasBeenSaved
bool mHasBeenSaved
Definition: ODPCMAliasBlockFile.h:157
ODPCMAliasBlockFile::mFileNameMutex
ODLock mFileNameMutex
Definition: ODPCMAliasBlockFile.h:146
ODPCMAliasBlockFile::mSummaryAvailableMutex
ODLock mSummaryAvailableMutex
Definition: ODPCMAliasBlockFile.h:154
ODPCMAliasBlockFile::SetClipOffset
void SetClipOffset(sampleCount numSamples)
sets the amount of samples the clip associated with this blockfile is offset in the wavetrack (non ef...
Definition: ODPCMAliasBlockFile.h:101
ODPCMAliasBlockFile::Read64K
bool Read64K(float *buffer, size_t start, size_t len) override
Returns the 64K summary data block.
Definition: ODPCMAliasBlockFile.cpp:183
ODPCMAliasBlockFile::BuildFromXML
static BlockFilePtr BuildFromXML(DirManager &dm, const wxChar **attrs)
Reconstructs from XML a ODPCMAliasBlockFile and reschedules it for OD loading.
Definition: ODPCMAliasBlockFile.cpp:272
name
const TranslatableString name
Definition: Distortion.cpp:98
ODPCMAliasBlockFile::GetFileName
GetFileNameResult GetFileName() const override
sets the file name the summary info will be saved in. threadsafe.
Definition: ODPCMAliasBlockFile.cpp:368
ODPCMAliasBlockFile::CalcSummary
void * CalcSummary(samplePtr buffer, size_t len, sampleFormat format, ArrayOf< char > &cleanup) override
Definition: ODPCMAliasBlockFile.cpp:450
format
int format
Definition: ExportPCM.cpp:56
ODPCMAliasBlockFile::GetMinMaxRMS
MinMaxRMS GetMinMaxRMS(size_t start, size_t len, bool mayThrow) const override
Gets extreme values for the specified region.
Definition: ODPCMAliasBlockFile.cpp:121
ODPCMAliasBlockFile::CloseLock
void CloseLock() override
Definition: ODPCMAliasBlockFile.cpp:104
sampleFormat
sampleFormat
Definition: SampleFormat.h:29
samplePtr
char * samplePtr
Definition: SampleFormat.h:49
ODPCMAliasBlockFile::GetGlobalStart
sampleCount GetGlobalStart() const
Definition: ODPCMAliasBlockFile.h:107
min
int min(int a, int b)
Definition: CompareAudioCommand.cpp:106
ODPCMAliasBlockFile::SetFileName
void SetFileName(wxFileNameWrapper &&name) override
sets the file name the summary info will be saved in. threadsafe.
Definition: ODPCMAliasBlockFile.cpp:360
ODLock
Definition: ODTaskThread.h:89
ODPCMAliasBlockFile::UnlockRead
void UnlockRead() const override
Allows reading on other threads.
Definition: ODPCMAliasBlockFile.cpp:556
sampleCount
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:18
ODPCMAliasBlockFile::mSummaryAvailable
bool mSummaryAvailable
Definition: ODPCMAliasBlockFile.h:155
ODPCMAliasBlockFile::Read256
bool Read256(float *buffer, size_t start, size_t len) override
Returns the 256 byte summary data block.
Definition: ODPCMAliasBlockFile.cpp:167
ODPCMAliasBlockFile::Unlock
void Unlock() override
Unlocks the blockfile only if it has a file that exists.
Definition: ODPCMAliasBlockFile.cpp:113
ODPCMAliasBlockFile::Recover
void Recover(void) override
Writes the summary file if summary data is available.
Definition: ODPCMAliasBlockFile.cpp:334
ODPCMAliasBlockFile::ReadSummary
bool ReadSummary(ArrayOf< char > &data) override
Read the summary into a buffer.
Definition: ODPCMAliasBlockFile.cpp:515
ODPCMAliasBlockFile::Lock
void Lock() override
Locks the blockfile only if it has a file that exists.
Definition: ODPCMAliasBlockFile.cpp:96
PCMAliasBlockFile.h
ODPCMAliasBlockFile::mWriteSummaryMutex
ODLock mWriteSummaryMutex
Definition: ODPCMAliasBlockFile.h:143
ODPCMAliasBlockFile::GetGlobalEnd
sampleCount GetGlobalEnd() const
Definition: ODPCMAliasBlockFile.h:110
ODPCMAliasBlockFile::WriteSummary
void WriteSummary() override
Write the summary to disk, using the derived ReadData() to get the data.
Definition: ODPCMAliasBlockFile.cpp:374
ODPCMAliasBlockFile::GetClipOffset
sampleCount GetClipOffset() const
Gets the number of samples the clip associated with this blockfile is offset by.
Definition: ODPCMAliasBlockFile.h:104
ODPCMAliasBlockFile::SaveXML
void SaveXML(XMLWriter &xmlFile) override
Saves as xml ODPCMAliasBlockFile or PCMAliasBlockFile depending on summary availability.
Definition: ODPCMAliasBlockFile.cpp:236
ArrayOf< char >
ODPCMAliasBlockFile::GetStart
sampleCount GetStart() const
Gets the value that indicates where the first sample in this block corresponds to the global sequence...
Definition: ODPCMAliasBlockFile.h:92
ODPCMAliasBlockFile::~ODPCMAliasBlockFile
virtual ~ODPCMAliasBlockFile()
Definition: ODPCMAliasBlockFile.cpp:70
ODPCMAliasBlockFile::mClipOffset
sampleCount mClipOffset
the ODTask needs to know where this blockfile lies in the track, so for convenience,...
Definition: ODPCMAliasBlockFile.h:163
ODPCMAliasBlockFile::LockRead
void LockRead() const override
Prevents a read on other threads.
Definition: ODPCMAliasBlockFile.cpp:551
ODPCMAliasBlockFile::SetStart
void SetStart(sampleCount startSample)
Sets the value that indicates where the first sample in this block corresponds to the global sequence...
Definition: ODPCMAliasBlockFile.h:89