prebuffer small sounds to reduce buffering threads. This differs

from preloading; this loads the file directly, before decompression,
so it can load much longer sounds, which avoids any disk access
so no buffering thread is needed.
This commit is contained in:
Glenn Maynard
2007-02-21 11:14:17 +00:00
parent 00f9745c75
commit cfaa20c6fc
4 changed files with 50 additions and 23 deletions
+34 -13
View File
@@ -83,28 +83,49 @@ RageSoundReader_FileReader *RageSoundReader_FileReader::TryOpenFile( RageFileBas
return NULL;
}
RageSoundReader_FileReader *RageSoundReader_FileReader::OpenFile( RString filename, RString &error )
#include "RageFileDriverMemory.h"
RageSoundReader_FileReader *RageSoundReader_FileReader::OpenFile( RString filename, RString &error, bool *pPrebuffer )
{
RageFile *pFile = new RageFile;
if( !pFile->Open(filename) )
RageFileBasic *pFile = NULL;
{
error = pFile->GetError();
delete pFile;
return NULL;
RageFile *pFileOpen = new RageFile;
if( !pFileOpen->Open(filename) )
{
error = pFile->GetError();
delete pFileOpen;
return NULL;
}
pFile = pFileOpen;
}
return OpenFile( pFile, error );
}
RageSoundReader_FileReader *RageSoundReader_FileReader::OpenFile( RageFileBasic *pFile, RString &error )
{
if( pPrebuffer )
{
if( pFile->GetFileSize() < 1024*50 )
{
RageFileObjMem *pMem = new RageFileObjMem;
bool bRet = FileCopy( *pFile, *pMem, error, NULL );
delete pFile;
pFile = pMem;
if( !bRet )
{
delete pFile;
return NULL;
}
pFile->Seek( 0 );
*pPrebuffer = true;
}
else
{
*pPrebuffer = false;
}
}
set<RString> FileTypes;
FileTypes.insert("ogg");
FileTypes.insert("mp3");
FileTypes.insert("wav");
RString format = GetExtension( pFile->GetDisplayPath() );
RString format = GetExtension( filename );
format.MakeLower();
error = "";