bool RageMovieTexture::GetFourCC( RString fn, RString &handler, RString &type ) { RString ignore, ext; splitpath( fn, ignore, ignore, ext); if( !ext.CompareNoCase(".mpg") || !ext.CompareNoCase(".mpeg") || !ext.CompareNoCase(".mpv") || !ext.CompareNoCase(".mpe") ) { handler = type = "MPEG"; return true; } if( !ext.CompareNoCase(".ogv") ) { handler = type = "Ogg"; return true; } //Not very pretty but should do all the same error checking without iostream #define HANDLE_ERROR(x) { \ LOG->Warn( "Error reading %s: %s", fn.c_str(), x ); \ handler = type = ""; \ return false; \ } RageFile file; if( !file.Open(fn) ) HANDLE_ERROR("Could not open file."); if( !file.Seek(0x70) ) HANDLE_ERROR("Could not seek."); type = " "; if( file.Read((char *)type.c_str(), 4) != 4 ) HANDLE_ERROR("Could not read."); ForceToAscii( type ); if( file.Seek(0xBC) != 0xBC ) HANDLE_ERROR("Could not seek."); handler = " "; if( file.Read((char *)handler.c_str(), 4) != 4 ) HANDLE_ERROR("Could not read."); ForceToAscii( handler ); return true; #undef HANDLE_ERROR }
static int64_t AVIORageFile_Seek( void *opaque, int64_t offset, int whence ) { RageFile *f = (RageFile *)opaque; if( whence == AVSEEK_SIZE ) return f->GetFileSize(); if( whence != SEEK_SET && whence != SEEK_CUR && whence != SEEK_END ) { LOG->Trace("Error: unsupported seek whence: %d", whence); return -1; } return f->Seek( (int) offset, whence ); }
static int OggRageFile_seek_func( void *datasource, ogg_int64_t offset, int whence ) { RageFile *f = (RageFile *) datasource; return f->Seek( (int) offset, whence ); }
avcodec::offset_t URLRageFile_seek( avcodec::URLContext *h, avcodec::offset_t pos, int whence ) { RageFile *f = (RageFile *) h->priv_data; return f->Seek( (int) pos, whence ); }