add Open( RageFileBasic *f ), cleanup

This commit is contained in:
Glenn Maynard
2005-03-30 23:07:52 +00:00
parent 517e084b99
commit be9b7dd3cf
2 changed files with 19 additions and 13 deletions
+16 -13
View File
@@ -31,32 +31,29 @@
#include "RageFile.h"
static size_t OggRageFile_read_func( void *ptr, size_t size, size_t nmemb, void *datasource )
{
RageFile *f = (RageFile *) datasource;
RageFileBasic *f = (RageFileBasic *) datasource;
return f->Read( ptr, size, nmemb );
}
static int OggRageFile_seek_func( void *datasource, ogg_int64_t offset, int whence )
{
RageFile *f = (RageFile *) datasource;
RageFileBasic *f = (RageFileBasic *) datasource;
return f->Seek( (int) offset, whence );
}
static int OggRageFile_close_func( void *datasource )
{
RageFile *f = (RageFile *) datasource;
RageFileBasic *f = (RageFileBasic *) datasource;
delete f;
return 0;
}
static long OggRageFile_tell_func( void *datasource )
{
RageFile *f = (RageFile *) datasource;
RageFileBasic *f = (RageFileBasic *) datasource;
return f->Tell();
}
const int read_block_size = 1024;
static CString ov_ssprintf( int err, const char *fmt, ...)
{
va_list va;
@@ -89,20 +86,23 @@ SoundReader_FileReader::OpenResult RageSoundReader_Vorbisfile::Open(CString file
{
filename=filename_;
vf = new OggVorbis_File;
memset( vf, 0, sizeof(*vf) );
RageFile *f = new RageFile;
if( !f->Open( filename ) )
{
SetError( ssprintf("ogg: opening \"%s\" failed: %s", filename.c_str(), f->GetError().c_str()) );
delete f;
delete vf;
vf = NULL;
return OPEN_FATAL_ERROR;
}
return Open( f );
}
SoundReader_FileReader::OpenResult RageSoundReader_Vorbisfile::Open( RageFileBasic *f )
{
vf = new OggVorbis_File;
memset( vf, 0, sizeof(*vf) );
ov_callbacks callbacks;
callbacks.read_func = OggRageFile_read_func;
callbacks.seek_func = OggRageFile_seek_func;
@@ -278,8 +278,11 @@ RageSoundReader_Vorbisfile::~RageSoundReader_Vorbisfile()
SoundReader *RageSoundReader_Vorbisfile::Copy() const
{
const RageFileBasic *pFrom = (RageFileBasic *) vf->datasource;
RageFileBasic *pFile = pFrom->Copy();
pFile->Seek(0);
RageSoundReader_Vorbisfile *ret = new RageSoundReader_Vorbisfile;
ret->Open(filename);
ret->Open( pFile );
return ret;
}
@@ -6,11 +6,14 @@
#include "RageSoundReader_FileReader.h"
typedef struct OggVorbis_File OggVorbis_File;
class RageFileBasic;
class RageSoundReader_Vorbisfile: public SoundReader_FileReader
{
public:
OpenResult Open(CString filename);
OpenResult Open( RageFileBasic *f );
int GetLength() const;
int GetLength_Fast() const;
int SetPosition_Accurate(int ms) { return SetPosition( ms, true ); }