From 9d6e78f9df10e94f6386f1f2185f70a367c9c585 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 28 Jun 2003 22:30:46 +0000 Subject: [PATCH] log avi codec --- .../src/arch/MovieTexture/MovieTexture.cpp | 54 +++++++++++++++++++ .../src/arch/MovieTexture/MovieTexture.h | 2 + 2 files changed, 56 insertions(+) diff --git a/stepmania/src/arch/MovieTexture/MovieTexture.cpp b/stepmania/src/arch/MovieTexture/MovieTexture.cpp index 5bb04fc4e3..e520baad73 100644 --- a/stepmania/src/arch/MovieTexture/MovieTexture.cpp +++ b/stepmania/src/arch/MovieTexture/MovieTexture.cpp @@ -1,14 +1,68 @@ #include "global.h" #include "MovieTexture.h" +#include "RageUtil.h" +#include "RageLog.h" #if defined(WIN32) #include "MovieTexture_DShow.h" #endif +#include +bool RageMovieTexture::GetFourCC( CString fn, CString &handler, CString &type ) +{ + CString 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; + } + + ifstream f; + f.exceptions( ifstream::eofbit | ifstream::failbit | ifstream::badbit ); + + try { + f.open(fn); + + f.seekg( 0x70, ios_base::beg ); + type = " "; + f.read((char *) type.c_str(), 4); + for(int i = 0; i < 4; ++i) + if(type[i] < 0x20 || type[i] > 0x7E) type[i] = '?'; + + f.seekg( 0xBC, ios_base::beg ); + + handler = " "; + f.read((char *) handler.c_str(), 4); + for(int i = 0; i < 4; ++i) + if(handler[i] < 0x20 || handler[i] > 0x7E) handler[i] = '?'; + } catch(ifstream::failure e) { + LOG->Warn("error on %s: %s", fn.c_str(), e.what() ); + handler = type = ""; + return false; + } + + return true; +} + +static void DumpAVIDebugInfo( CString fn ) +{ + CString type, handler; + if( !RageMovieTexture::GetFourCC( fn, handler, type ) ) + return; + + LOG->Info("Movie %s has handler '%s', type '%s'", fn.c_str(), handler.c_str(), type.c_str()); +} + /* Try drivers in order of preference until we find one that works. */ /* Well, eventually; for now it's DShow or bust.w */ RageMovieTexture *MakeRageMovieTexture(RageTextureID ID) { + DumpAVIDebugInfo( ID.filename ); + #if defined(WIN32) return new MovieTexture_DShow(ID); #else diff --git a/stepmania/src/arch/MovieTexture/MovieTexture.h b/stepmania/src/arch/MovieTexture/MovieTexture.h index fbefd562dc..1992eab102 100644 --- a/stepmania/src/arch/MovieTexture/MovieTexture.h +++ b/stepmania/src/arch/MovieTexture/MovieTexture.h @@ -21,6 +21,8 @@ public: virtual void SetLooping(bool looping=true) { } bool IsAMovie() const { return true; } + + static bool GetFourCC( CString fn, CString &handler, CString &type ); }; RageMovieTexture *MakeRageMovieTexture(RageTextureID ID);