add Open( RageFileBasic *f ), cleanup
This commit is contained in:
@@ -31,32 +31,29 @@
|
|||||||
#include "RageFile.h"
|
#include "RageFile.h"
|
||||||
static size_t OggRageFile_read_func( void *ptr, size_t size, size_t nmemb, void *datasource )
|
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 );
|
return f->Read( ptr, size, nmemb );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int OggRageFile_seek_func( void *datasource, ogg_int64_t offset, int whence )
|
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 );
|
return f->Seek( (int) offset, whence );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int OggRageFile_close_func( void *datasource )
|
static int OggRageFile_close_func( void *datasource )
|
||||||
{
|
{
|
||||||
RageFile *f = (RageFile *) datasource;
|
RageFileBasic *f = (RageFileBasic *) datasource;
|
||||||
delete f;
|
delete f;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long OggRageFile_tell_func( void *datasource )
|
static long OggRageFile_tell_func( void *datasource )
|
||||||
{
|
{
|
||||||
RageFile *f = (RageFile *) datasource;
|
RageFileBasic *f = (RageFileBasic *) datasource;
|
||||||
return f->Tell();
|
return f->Tell();
|
||||||
}
|
}
|
||||||
|
|
||||||
const int read_block_size = 1024;
|
|
||||||
|
|
||||||
|
|
||||||
static CString ov_ssprintf( int err, const char *fmt, ...)
|
static CString ov_ssprintf( int err, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
@@ -89,20 +86,23 @@ SoundReader_FileReader::OpenResult RageSoundReader_Vorbisfile::Open(CString file
|
|||||||
{
|
{
|
||||||
filename=filename_;
|
filename=filename_;
|
||||||
|
|
||||||
vf = new OggVorbis_File;
|
|
||||||
memset( vf, 0, sizeof(*vf) );
|
|
||||||
|
|
||||||
RageFile *f = new RageFile;
|
RageFile *f = new RageFile;
|
||||||
|
|
||||||
if( !f->Open( filename ) )
|
if( !f->Open( filename ) )
|
||||||
{
|
{
|
||||||
SetError( ssprintf("ogg: opening \"%s\" failed: %s", filename.c_str(), f->GetError().c_str()) );
|
SetError( ssprintf("ogg: opening \"%s\" failed: %s", filename.c_str(), f->GetError().c_str()) );
|
||||||
delete f;
|
delete f;
|
||||||
delete vf;
|
|
||||||
vf = NULL;
|
|
||||||
return OPEN_FATAL_ERROR;
|
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;
|
ov_callbacks callbacks;
|
||||||
callbacks.read_func = OggRageFile_read_func;
|
callbacks.read_func = OggRageFile_read_func;
|
||||||
callbacks.seek_func = OggRageFile_seek_func;
|
callbacks.seek_func = OggRageFile_seek_func;
|
||||||
@@ -278,8 +278,11 @@ RageSoundReader_Vorbisfile::~RageSoundReader_Vorbisfile()
|
|||||||
|
|
||||||
SoundReader *RageSoundReader_Vorbisfile::Copy() const
|
SoundReader *RageSoundReader_Vorbisfile::Copy() const
|
||||||
{
|
{
|
||||||
|
const RageFileBasic *pFrom = (RageFileBasic *) vf->datasource;
|
||||||
|
RageFileBasic *pFile = pFrom->Copy();
|
||||||
|
pFile->Seek(0);
|
||||||
RageSoundReader_Vorbisfile *ret = new RageSoundReader_Vorbisfile;
|
RageSoundReader_Vorbisfile *ret = new RageSoundReader_Vorbisfile;
|
||||||
ret->Open(filename);
|
ret->Open( pFile );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,14 @@
|
|||||||
#include "RageSoundReader_FileReader.h"
|
#include "RageSoundReader_FileReader.h"
|
||||||
|
|
||||||
typedef struct OggVorbis_File OggVorbis_File;
|
typedef struct OggVorbis_File OggVorbis_File;
|
||||||
|
class RageFileBasic;
|
||||||
|
|
||||||
class RageSoundReader_Vorbisfile: public SoundReader_FileReader
|
class RageSoundReader_Vorbisfile: public SoundReader_FileReader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OpenResult Open(CString filename);
|
OpenResult Open(CString filename);
|
||||||
|
OpenResult Open( RageFileBasic *f );
|
||||||
|
|
||||||
int GetLength() const;
|
int GetLength() const;
|
||||||
int GetLength_Fast() const;
|
int GetLength_Fast() const;
|
||||||
int SetPosition_Accurate(int ms) { return SetPosition( ms, true ); }
|
int SetPosition_Accurate(int ms) { return SetPosition( ms, true ); }
|
||||||
|
|||||||
Reference in New Issue
Block a user