本文整理汇总了C++中IsSummaryAvailable函数的典型用法代码示例。如果您正苦于以下问题:C++ IsSummaryAvailable函数的具体用法?C++ IsSummaryAvailable怎么用?C++ IsSummaryAvailable使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsSummaryAvailable函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LockRead
/// If the summary has been computed,
/// Construct a new PCMAliasBlockFile based on this one.
/// otherwise construct an ODPCMAliasBlockFile that still needs to be computed.
/// @param newFileName The filename to copy the summary data to.
BlockFile *ODDecodeBlockFile::Copy(wxFileName newFileName)
{
BlockFile *newBlockFile;
//mAliasedFile can change so we lock readdatamutex, which is responsible for it.
LockRead();
if(IsSummaryAvailable())
{
//create a simpleblockfile, because once it has the summary it is a simpleblockfile for all intents an purposes
newBlockFile = SimpleBlockFile::Copy(newFileName) ;
}
else
{
//Summary File might exist in this case, but it probably (99.999% of the time) won't.
newBlockFile = new ODDecodeBlockFile(newFileName,
mAudioFileName, mAliasStart,
mLen, mAliasChannel, mType,
mMin, mMax, mRMS,IsSummaryAvailable());
//The client code will need to schedule this blockfile for OD decoding if it is going to a new track.
//It can do this by checking for IsDataAvailable()==false.
}
UnlockRead();
return newBlockFile;
}
示例2: PCMAliasBlockFile
/// If the summary has been computed,
/// Construct a new PCMAliasBlockFile based on this one.
/// otherwise construct an ODPCMAliasBlockFile that still needs to be computed.
/// @param newFileName The filename to copy the summary data to.
BlockFile *ODPCMAliasBlockFile::Copy(wxFileName newFileName)
{
BlockFile *newBlockFile;
//mAliasedFile can change so we lock readdatamutex, which is responsible for it.
mReadDataMutex.Lock();
//If the file has been written AND it has been saved, we create a PCM alias blockfile because for
//all intents and purposes, it is the same.
//However, if it hasn't been saved yet, we shouldn't create one because the default behavior of the
//PCMAliasBlockFile is to lock on exit, and this will cause orphaned blockfiles..
if(IsSummaryAvailable() && mHasBeenSaved)
{
newBlockFile = new PCMAliasBlockFile(newFileName,
mAliasedFileName, mAliasStart,
mLen, mAliasChannel,
mMin, mMax, mRMS);
}
else
{
//Summary File might exist in this case, but it might not.
newBlockFile = new ODPCMAliasBlockFile(newFileName,
mAliasedFileName, mAliasStart,
mLen, mAliasChannel,
mMin, mMax, mRMS,IsSummaryAvailable());
//The client code will need to schedule this blockfile for OD summarizing if it is going to a new track.
}
mReadDataMutex.Unlock();
return newBlockFile;
}
示例3: LockRead
/// Writes the xml as a PCMAliasBlockFile if we can (if we have a summary file)
/// Otherwise writes XML as a subset of attributes with 'odpcmaliasblockfile as the start tag.
/// Most notably, the summaryfile attribute refers to a file that does not yet, so when the project file is read back in
/// and this object reconstructed, it needs to avoid trying to open it as well as schedule itself for OD loading
void ODPCMAliasBlockFile::SaveXML(XMLWriter &xmlFile)
{
//we lock this so that mAliasedFileName doesn't change.
LockRead();
if(IsSummaryAvailable())
{
PCMAliasBlockFile::SaveXML(xmlFile);
mHasBeenSaved = true;
}
else
{
xmlFile.StartTag(wxT("odpcmaliasblockfile"));
//unlock to prevent deadlock and resume lock after.
UnlockRead();
mFileNameMutex.Lock();
xmlFile.WriteAttr(wxT("summaryfile"), mFileName.GetFullName());
mFileNameMutex.Unlock();
LockRead();
xmlFile.WriteAttr(wxT("aliasfile"), mAliasedFileName.GetFullPath());
xmlFile.WriteAttr(wxT("aliasstart"), mAliasStart);
xmlFile.WriteAttr(wxT("aliaslen"), mLen);
xmlFile.WriteAttr(wxT("aliaschannel"), mAliasChannel);
xmlFile.EndTag(wxT("odpcmaliasblockfile"));
}
UnlockRead();
}
示例4: ODPCMAliasBlockFile
/// If the summary has been computed,
/// Construct a new PCMAliasBlockFile based on this one.
/// otherwise construct an ODPCMAliasBlockFile that still needs to be computed.
/// @param newFileName The filename to copy the summary data to.
BlockFile *ODDecodeBlockFile::Copy(wxFileName newFileName)
{
BlockFile *newBlockFile;
if(IsSummaryAvailable())
{
//create a simpleblockfile, because once it has the summary it is a simpleblockfile for all intents an purposes
newBlockFile = SimpleBlockFile::Copy(newFileName) ;
}
else
{
//TODO:do the correct constructor thingthing for this one.
//Also, this one needs to be scheduled for loading as well ... what to do?
newBlockFile = NULL; // new ODPCMAliasBlockFile(newFileName,
// mAliasedFileName, mAliasStart,
// mLen, mAliasChannel,
// mMin, mMax, mRMS);
//TODO:add to the ODManager Task list so this one loads itself. It's wasteful to do this twice, but lets be simple and naieve
//just this once,.
}
return newBlockFile;
}
示例5: Recover
void ODDecodeBlockFile::Recover(void)
{
if(IsSummaryAvailable())
{
WriteODDecodeBlockFile();
}
}
示例6: LockForRead
/// Writes the xml as a SimpleBlockFile if we can (if we have a summary file)
/// Otherwise writes XML as a subset of attributes with 'odpcmaliasblockfile as the start tag.
/// Most notably, the summaryfile attribute refers to a file that does not yet, so when the project file is read back in
/// and this object reconstructed, it needs to avoid trying to open it as well as schedule itself for OD loading
void ODDecodeBlockFile::SaveXML(XMLWriter &xmlFile)
// may throw
{
auto locker = LockForRead();
if(IsSummaryAvailable())
{
SimpleBlockFile::SaveXML(xmlFile);
}
else
{
xmlFile.StartTag(wxT("oddecodeblockfile"));
{
//unlock to prevent deadlock and resume lock after.
auto suspension = locker.Suspend();
ODLocker locker2{ &mFileNameMutex };
xmlFile.WriteAttr(wxT("summaryfile"), mFileName.GetFullName());
}
xmlFile.WriteAttr(wxT("audiofile"), mAudioFileName.GetFullPath());
xmlFile.WriteAttr(wxT("aliasstart"),
mAliasStart.as_long_long());
xmlFile.WriteAttr(wxT("aliaslen"), mLen);
xmlFile.WriteAttr(wxT("aliaschannel"), mAliasChannel);
xmlFile.WriteAttr(wxT("decodetype"), (size_t)mType);
xmlFile.EndTag(wxT("oddecodeblockfile"));
}
}
示例7: SaveXML
/// Writes the xml as a PCMAliasBlockFile if we can (if we have a summary file)
/// Otherwise writes XML as a subset of attributes with 'odpcmaliasblockfile as the start tag.
/// Most notably, the summaryfile attribute refers to a file that does not yet, so when the project file is read back in
/// and this object reconstructed, it needs to avoid trying to open it as well as schedule itself for OD loading
void ODPCMAliasBlockFile::SaveXML(XMLWriter &xmlFile)
{
//we lock this so that mAliasedFileName doesn't change.
mReadDataMutex.Lock();
if(IsSummaryAvailable())
{
PCMAliasBlockFile::SaveXML(xmlFile);
mHasBeenSaved = true;
}
else
{
xmlFile.StartTag(wxT("odpcmaliasblockfile"));
//unlock to prevent deadlock and resume lock after.
mReadDataMutex.Unlock();
mFileNameMutex.Lock();
xmlFile.WriteAttr(wxT("summaryfile"), mFileName.GetFullName());
mFileNameMutex.Unlock();
mReadDataMutex.Lock();
xmlFile.WriteAttr(wxT("aliasfile"), mAliasedFileName.GetFullPath());
xmlFile.WriteAttr(wxT("aliasstart"), mAliasStart);
xmlFile.WriteAttr(wxT("aliaslen"), mLen);
xmlFile.WriteAttr(wxT("aliaschannel"), mAliasChannel);
//these have not been computed yet.
//xmlFile.WriteAttr(wxT("min"), mMin);
//xmlFile.WriteAttr(wxT("max"), mMax);
// xmlFile.WriteAttr(wxT("rms"), mRMS);
xmlFile.EndTag(wxT("odpcmaliasblockfile"));
}
mReadDataMutex.Unlock();
}
示例8: PCMAliasBlockFile
/// If the summary has been computed,
/// Construct a new PCMAliasBlockFile based on this one.
/// otherwise construct an ODPCMAliasBlockFile that still needs to be computed.
/// @param newFileName The filename to copy the summary data to.
BlockFile *ODPCMAliasBlockFile::Copy(wxFileName newFileName)
{
BlockFile *newBlockFile;
if(IsSummaryAvailable())
{
newBlockFile = new PCMAliasBlockFile(newFileName,
mAliasedFileName, mAliasStart,
mLen, mAliasChannel,
mMin, mMax, mRMS);
}
else
{
//TODO: does it make sense to create a copy of ODPCMAliasBF? Summary File doesn't exist in this case.
//Also, this one needs to be scheduled for loading as well ... what to do?
newBlockFile = new ODPCMAliasBlockFile(newFileName,
mAliasedFileName, mAliasStart,
mLen, mAliasChannel,
mMin, mMax, mRMS);
//TODO:add to the ODManager Task list so this one loads itself. It's wasteful to do this twice, but lets be simple and naieve
//just this once,.
}
return newBlockFile;
}
示例9: Recover
void ODPCMAliasBlockFile::Recover(void)
{
if(IsSummaryAvailable())
{
WriteSummary();
}
}
示例10: LockForRead
/// Writes the xml as a PCMAliasBlockFile if we can (if we have a summary file)
/// Otherwise writes XML as a subset of attributes with 'odpcmaliasblockfile as the start tag.
/// Most notably, the summaryfile attribute refers to a file that does not yet exist, so when the project file is read back in
/// and this object reconstructed, it needs to avoid trying to open it as well as schedule itself for OD loading
void ODPCMAliasBlockFile::SaveXML(XMLWriter &xmlFile)
// may throw
{
//we lock this so that mAliasedFileName doesn't change.
auto locker = LockForRead();
if(IsSummaryAvailable())
{
PCMAliasBlockFile::SaveXML(xmlFile);
mHasBeenSaved = true;
}
else
{
xmlFile.StartTag(wxT("odpcmaliasblockfile"));
//unlock to prevent deadlock and resume lock after.
{
auto suspension = locker.Suspend();
ODLocker locker2 { &mFileNameMutex };
xmlFile.WriteAttr(wxT("summaryfile"), mFileName.GetFullName());
}
xmlFile.WriteAttr(wxT("aliasfile"), mAliasedFileName.GetFullPath());
xmlFile.WriteAttr(wxT("aliasstart"),
mAliasStart.as_long_long());
xmlFile.WriteAttr(wxT("aliaslen"), mLen);
xmlFile.WriteAttr(wxT("aliaschannel"), mAliasChannel);
xmlFile.EndTag(wxT("odpcmaliasblockfile"));
}
}
示例11: DoWriteSummary
///Calls write summary, and makes sure it is only done once in a thread-safe fasion.
void ODPCMAliasBlockFile::DoWriteSummary()
{
mWriteSummaryMutex.Lock();
if(!IsSummaryAvailable())
WriteSummary();
mWriteSummaryMutex.Unlock();
}
示例12: ReadSummary
/// Read the summary of this alias block from disk. Since the audio data
/// is elsewhere, this consists of reading the entire summary file.
///
/// @param *data The buffer where the summary data will be stored. It must
/// be at least mSummaryInfo.totalSummaryBytes long.
bool ODDecodeBlockFile::ReadSummary(void *data)
{
//I dont think we need to add a mutex here because only the main thread changes filenames and calls ReadSummarz
if(IsSummaryAvailable())
return SimpleBlockFile::ReadSummary(data);
memset(data, 0, (size_t)mSummaryInfo.totalSummaryBytes);
return true;
}
示例13: ReadSummary
/// Read the summary of this alias block from disk. Since the audio data
/// is elsewhere, this consists of reading the entire summary file.
/// Fill with zeroes and return false if data are unavailable for any reason.
///
/// @param *data The buffer where the summary data will be stored. It must
/// be at least mSummaryInfo.totalSummaryBytes long.
bool ODDecodeBlockFile::ReadSummary(ArrayOf<char> &data)
{
//I dont think we need to add a mutex here because only the main thread changes filenames and calls ReadSummary
if(IsSummaryAvailable())
return SimpleBlockFile::ReadSummary(data);
data.reinit( mSummaryInfo.totalSummaryBytes );
memset(data.get(), 0, mSummaryInfo.totalSummaryBytes);
return false;
}
示例14: ReadData
/// Reads the specified data from the aliased file, using libsndfile,
/// and converts it to the given sample format.
///
/// @param data The buffer to read the sample data into.
/// @param format The format to convert the data into
/// @param start The offset within the block to begin reading
/// @param len The number of samples to read
int ODDecodeBlockFile::ReadData(samplePtr data, sampleFormat format,
sampleCount start, sampleCount len)
{
if(IsSummaryAvailable())
return SimpleBlockFile::ReadData(data,format,start,len);
else
return 0; //TODO: do we need to zero out the data? It would be more efficient if the client code checked
//ISSummaryAvailable first.
}
示例15: ClearSamples
/// Returns the 64K summary data block
/// Fill with zeroes and return false if data are unavailable for any reason.
bool ODDecodeBlockFile::Read64K(float *buffer, size_t start, size_t len)
{
if(IsSummaryAvailable())
{
return SimpleBlockFile::Read64K(buffer,start,len);
}
else
{
ClearSamples((samplePtr)buffer, floatSample, 0, len);
return false;
}
}