Update RageSoundReader.cpp
The warning inside the loop makes the log too messy and is too much of a performance hit on very low end hardware. I'm changing it to remove the mid-loop logging and only return a logged warning on a failure.
This commit is contained in:
+25
-25
@@ -6,34 +6,34 @@
|
|||||||
REGISTER_CLASS_TRAITS( RageSoundReader, pCopy->Copy() );
|
REGISTER_CLASS_TRAITS( RageSoundReader, pCopy->Copy() );
|
||||||
|
|
||||||
/* Read(), handling the STREAM_LOOPED and empty return cases. */
|
/* Read(), handling the STREAM_LOOPED and empty return cases. */
|
||||||
int RageSoundReader::RetriedRead( float *pBuffer, int iFrames, int *iSourceFrame, float *fRate )
|
int RageSoundReader::RetriedRead(float* pBuffer, int iFrames, int* iSourceFrame, float* fRate) {
|
||||||
{
|
if (iFrames == 0) {
|
||||||
/* pReader may return 0, which means "try again immediately". As a failsafe,
|
return 0;
|
||||||
* only try this a finite number of times. Use a high number, because in
|
|
||||||
* principle each filter in the stack may cause this. */
|
|
||||||
int iTries = 10;
|
|
||||||
while( --iTries )
|
|
||||||
{
|
|
||||||
if( fRate )
|
|
||||||
*fRate = this->GetStreamToSourceRatio();
|
|
||||||
if( iSourceFrame )
|
|
||||||
*iSourceFrame = this->GetNextSourceFrame();
|
|
||||||
|
|
||||||
int iGotFrames = this->Read( pBuffer, iFrames );
|
|
||||||
|
|
||||||
if( iGotFrames == RageSoundReader::STREAM_LOOPED )
|
|
||||||
iGotFrames = 0;
|
|
||||||
|
|
||||||
if( iGotFrames != 0 )
|
|
||||||
return iGotFrames;
|
|
||||||
|
|
||||||
// If the user is having I/O issues, give them a hint in the logs.
|
|
||||||
LOG->Warn( "Read() failed, retrying..." );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG->Warn( "Read() returned a failure status after 10 attempts to read the file; likely an I/O error" );
|
// pReader may return 0, which means "try again immediately". As a failsafe,
|
||||||
|
// only try this a finite number of times. Use a high number, because in
|
||||||
|
// principle each filter in the stack may cause this.
|
||||||
|
std::uint8_t retryCount = 50;
|
||||||
|
while (--retryCount) {
|
||||||
|
if (fRate) {
|
||||||
|
*fRate = this->GetStreamToSourceRatio();
|
||||||
|
}
|
||||||
|
if (iSourceFrame) {
|
||||||
|
*iSourceFrame = this->GetNextSourceFrame();
|
||||||
|
}
|
||||||
|
int framesRead = this->Read(pBuffer, iFrames);
|
||||||
|
if (framesRead == RageSoundReader::STREAM_LOOPED) {
|
||||||
|
framesRead = 0;
|
||||||
|
}
|
||||||
|
if (framesRead != 0) {
|
||||||
|
return framesRead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Pretend we got EOF. */
|
LOG->Warn("WARNING: could not read from the sound file. Giving up.");
|
||||||
|
|
||||||
|
// Pretend we got EOF.
|
||||||
return RageSoundReader::END_OF_FILE;
|
return RageSoundReader::END_OF_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user