From be9b7dd3cf0e885f17779d7489baeff16d324044 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 30 Mar 2005 23:07:52 +0000 Subject: [PATCH] add Open( RageFileBasic *f ), cleanup --- stepmania/src/RageSoundReader_Vorbisfile.cpp | 29 +++++++++++--------- stepmania/src/RageSoundReader_Vorbisfile.h | 3 ++ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/stepmania/src/RageSoundReader_Vorbisfile.cpp b/stepmania/src/RageSoundReader_Vorbisfile.cpp index ac978b834e..4191379879 100644 --- a/stepmania/src/RageSoundReader_Vorbisfile.cpp +++ b/stepmania/src/RageSoundReader_Vorbisfile.cpp @@ -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; } diff --git a/stepmania/src/RageSoundReader_Vorbisfile.h b/stepmania/src/RageSoundReader_Vorbisfile.h index 0e1a06a6db..3655d3b803 100644 --- a/stepmania/src/RageSoundReader_Vorbisfile.h +++ b/stepmania/src/RageSoundReader_Vorbisfile.h @@ -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 ); }