MediaInfoLib
0.7
|
00001 /* MediaInfoDLL - All info about media files, for DLL 00002 // Copyright (C) 2002-2009 Jerome Martinez, Zen@MediaArea.net 00003 // 00004 // This library is free software: you can redistribute it and/or modify it 00005 // under the terms of the GNU Lesser General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // any later version. 00008 // 00009 // This library is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU Lesser General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU Lesser General Public License 00015 // along with this library. If not, see <http://www.gnu.org/licenses/>. 00016 // 00017 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00018 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00019 // 00020 // Public DLL interface implementation 00021 // Wrapper for MediaInfo Library 00022 // See MediaInfo.h for help 00023 // 00024 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 00025 00026 #ifndef MediaInfoDLLH 00027 #define MediaInfoDLLH 00028 00029 //*************************************************************************** 00030 // Platforms (from libzen) 00031 //*************************************************************************** 00032 00033 /*---------------------------------------------------------------------------*/ 00034 /*Win32*/ 00035 #if defined(__NT__) || defined(_WIN32) || defined(WIN32) 00036 #ifndef WIN32 00037 #define WIN32 00038 #endif 00039 #ifndef _WIN32 00040 #define _WIN32 00041 #endif 00042 #ifndef __WIN32__ 00043 #define __WIN32__ 1 00044 #endif 00045 #endif 00046 00047 /*---------------------------------------------------------------------------*/ 00048 /*Win64*/ 00049 #if defined(_WIN64) || defined(WIN64) 00050 #ifndef WIN64 00051 #define WIN64 00052 #endif 00053 #ifndef _WIN64 00054 #define _WIN64 00055 #endif 00056 #ifndef __WIN64__ 00057 #define __WIN64__ 1 00058 #endif 00059 #endif 00060 00061 /*---------------------------------------------------------------------------*/ 00062 /*Windows*/ 00063 #if defined(WIN32) || defined(WIN64) 00064 #ifndef WINDOWS 00065 #define WINDOWS 00066 #endif 00067 #ifndef _WINDOWS 00068 #define _WINDOWS 00069 #endif 00070 #ifndef __WINDOWS__ 00071 #define __WINDOWS__ 1 00072 #endif 00073 #endif 00074 00075 /*---------------------------------------------------------------------------*/ 00076 /*Unix (Linux, HP, Sun, BeOS...)*/ 00077 #if defined(UNIX) || defined(_UNIX) || defined(__UNIX__) \ 00078 || defined(__unix) || defined(__unix__) \ 00079 || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) \ 00080 || defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) \ 00081 || defined(__EMX__) || defined(__VMS) || defined(__BEOS__) 00082 #ifndef UNIX 00083 #define UNIX 00084 #endif 00085 #ifndef _UNIX 00086 #define _UNIX 00087 #endif 00088 #ifndef __UNIX__ 00089 #define __UNIX__ 1 00090 #endif 00091 #endif 00092 00093 /*---------------------------------------------------------------------------*/ 00094 /*MacOS Classic*/ 00095 #if defined(macintosh) 00096 #ifndef MACOS 00097 #define MACOS 00098 #endif 00099 #ifndef _MACOS 00100 #define _MACOS 00101 #endif 00102 #ifndef __MACOS__ 00103 #define __MACOS__ 1 00104 #endif 00105 #endif 00106 00107 /*---------------------------------------------------------------------------*/ 00108 /*MacOS X*/ 00109 #if defined(__APPLE__) && defined(__MACH__) 00110 #ifndef MACOSX 00111 #define MACOSX 00112 #endif 00113 #ifndef _MACOSX 00114 #define _MACOSX 00115 #endif 00116 #ifndef __MACOSX__ 00117 #define __MACOSX__ 1 00118 #endif 00119 #endif 00120 00121 /*Test of targets*/ 00122 #if defined(WINDOWS) && defined(UNIX) && defined(MACOS) && defined(MACOSX) 00123 #pragma message Multiple platforms??? 00124 #endif 00125 00126 #if !defined(WIN32) && !defined(UNIX) && !defined(MACOS) && !defined(MACOSX) 00127 #pragma message No known platforms, assume default 00128 #endif 00129 00130 /*-------------------------------------------------------------------------*/ 00131 #if defined (_WIN32) || defined (WIN32) 00132 #define MEDIAINFODLL_NAME "MediaInfo.dll" 00133 #elif defined(__APPLE__) && defined(__MACH__) 00134 #define MEDIAINFODLL_NAME "libmediainfo.0.dylib" 00135 #define __stdcall 00136 #else 00137 #define MEDIAINFODLL_NAME "libmediainfo.so.0" 00138 #define __stdcall 00139 #endif //!defined(_WIN32) || defined (WIN32) 00140 00141 /*-------------------------------------------------------------------------*/ 00142 /*Char types */ 00143 #undef _T 00144 #define _T(__x) __T(__x) 00145 #if defined(UNICODE) || defined (_UNICODE) 00146 typedef wchar_t MediaInfo_Char; 00147 #undef __T 00148 #define __T(__x) L ## __x 00149 #define MEDIAINFO_Ansi "" 00150 #else 00151 typedef char MediaInfo_Char; 00152 #undef __T 00153 #define __T(__x) __x 00154 #define MEDIAINFO_Ansi "A" 00155 #endif 00156 /*-------------------------------------------------------------------------*/ 00157 00158 /*-------------------------------------------------------------------------*/ 00159 /*8-bit int */ 00160 typedef unsigned char MediaInfo_int8u; 00161 /*-------------------------------------------------------------------------*/ 00162 00163 /*-------------------------------------------------------------------------*/ 00164 /*64-bit int */ 00165 #if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__) 00166 #undef MAXTYPE_INT 00167 #define MAXTYPE_INT 64 00168 typedef unsigned long long MediaInfo_int64u; 00169 #elif defined(__WIN32__) || defined(_WIN32) 00170 #undef MAXTYPE_INT 00171 #define MAXTYPE_INT 64 00172 typedef unsigned __int64 MediaInfo_int64u; 00173 #else 00174 #pragma message This machine has no 64-bit integer type? 00175 #endif 00176 /*-------------------------------------------------------------------------*/ 00177 00178 /*-------------------------------------------------------------------------*/ 00179 /*NULL */ 00180 #ifndef NULL 00181 #define NULL 0 00182 #endif 00183 /*-------------------------------------------------------------------------*/ 00184 00186 typedef enum MediaInfo_stream_t 00187 { 00188 MediaInfo_Stream_General, 00189 MediaInfo_Stream_Video, 00190 MediaInfo_Stream_Audio, 00191 MediaInfo_Stream_Text, 00192 MediaInfo_Stream_Chapters, 00193 MediaInfo_Stream_Image, 00194 MediaInfo_Stream_Menu, 00195 MediaInfo_Stream_Max 00196 } MediaInfo_stream_C; 00197 00199 typedef enum MediaInfo_info_t 00200 { 00201 MediaInfo_Info_Name, 00202 MediaInfo_Info_Text, 00203 MediaInfo_Info_Measure, 00204 MediaInfo_Info_Options, 00205 MediaInfo_Info_Name_Text, 00206 MediaInfo_Info_Measure_Text, 00207 MediaInfo_Info_Info, 00208 MediaInfo_Info_HowTo, 00209 MediaInfo_Info_Max 00210 } MediaInfo_info_C; 00211 00213 typedef enum MediaInfo_infooptions_t 00214 { 00215 MediaInfo_InfoOption_ShowInInform, 00216 MediaInfo_InfoOption_Reserved, 00217 MediaInfo_InfoOption_ShowInSupported, 00218 MediaInfo_InfoOption_TypeOfValue, 00219 MediaInfo_InfoOption_Max 00220 } MediaInfo_infooptions_C; 00221 00223 typedef enum MediaInfo_fileoptions_t 00224 { 00225 MediaInfo_FileOption_Nothing =0x00, 00226 MediaInfo_FileOption_NoRecursive =0x01, 00227 MediaInfo_FileOption_CloseAll =0x02, 00228 MediaInfo_FileOption_Max =0x04 00229 } MediaInfo_fileoptions_C; 00230 00231 00232 #ifdef __cplusplus 00233 extern "C" 00234 { 00235 #endif /* __cplusplus */ 00236 00237 #ifdef MEDIAINFO_GLIBC 00238 #include <gmodule.h> 00239 static GModule* MediaInfo_Module=NULL; 00240 #elif defined (_WIN32) || defined (WIN32) 00241 #include <windows.h> 00242 static HMODULE MediaInfo_Module=NULL; 00243 #else 00244 #include <dlfcn.h> 00245 static void* MediaInfo_Module=NULL; 00246 #endif 00247 static size_t Module_Count=0; 00248 00249 #ifdef MEDIAINFO_GLIBC 00250 #define MEDIAINFO_ASSIGN(_Name,_Name2) \ 00251 if (!g_module_symbol (MediaInfo_Module, "MediaInfo" MEDIAINFO_Ansi "_" _Name2, (gpointer*)&MediaInfo_##_Name)) \ 00252 Errors++; 00253 #define MEDIAINFOLIST_ASSIGN(_Name,_Name2) \ 00254 if (!g_module_symbol (MediaInfo_Module, "MediaInfoList" MEDIAINFO_Ansi "_" _Name2, (gpointer*)&MediaInfoList_##_Name)) \ 00255 Errors++; 00256 #elif defined (_WIN32) || defined (WIN32) 00257 #define MEDIAINFO_ASSIGN(_Name,_Name2) \ 00258 MediaInfo_##_Name=(MEDIAINFO_##_Name)GetProcAddress(MediaInfo_Module, "MediaInfo" MEDIAINFO_Ansi "_" _Name2); \ 00259 if (MediaInfo_##_Name==NULL) Errors++; 00260 #define MEDIAINFOLIST_ASSIGN(_Name,_Name2) \ 00261 MediaInfoList_##_Name=(MEDIAINFOLIST_##_Name)GetProcAddress(MediaInfo_Module, "MediaInfoList" MEDIAINFO_Ansi "_" _Name2); \ 00262 if (MediaInfoList_##_Name==NULL) Errors++; 00263 #else 00264 #define MEDIAINFO_ASSIGN(_Name,_Name2) \ 00265 MediaInfo_##_Name=(MEDIAINFO_##_Name)dlsym(MediaInfo_Module, "MediaInfo" MEDIAINFO_Ansi "_" _Name2); \ 00266 if (MediaInfo_##_Name==NULL) Errors++; 00267 #define MEDIAINFOLIST_ASSIGN(_Name,_Name2) \ 00268 MediaInfoList_##_Name=(MEDIAINFOLIST_##_Name)dlsym(MediaInfo_Module, "MediaInfoList" MEDIAINFO_Ansi "_" _Name2); \ 00269 if (MediaInfoList_##_Name==NULL) Errors++; 00270 #endif 00271 00272 typedef void* (__stdcall *MEDIAINFO_New)(); static MEDIAINFO_New MediaInfo_New; 00273 typedef void* (__stdcall *MEDIAINFOLIST_New)(); static MEDIAINFOLIST_New MediaInfoList_New; 00274 typedef void (__stdcall *MEDIAINFO_Delete)(void*); static MEDIAINFO_Delete MediaInfo_Delete; 00275 typedef void (__stdcall *MEDIAINFOLIST_Delete)(void*); static MEDIAINFOLIST_Delete MediaInfoList_Delete; 00276 typedef size_t (__stdcall *MEDIAINFO_Open)(void*, const MediaInfo_Char*); static MEDIAINFO_Open MediaInfo_Open; 00277 typedef size_t (__stdcall *MEDIAINFOLIST_Open)(void*, const MediaInfo_Char*, const MediaInfo_fileoptions_C); static MEDIAINFOLIST_Open MediaInfoList_Open; 00278 typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Init)(void*, MediaInfo_int64u File_Size, MediaInfo_int64u File_Offset); static MEDIAINFO_Open_Buffer_Init MediaInfo_Open_Buffer_Init; 00279 typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Continue)(void*, MediaInfo_int8u* Buffer, size_t Buffer_Size); static MEDIAINFO_Open_Buffer_Continue MediaInfo_Open_Buffer_Continue; 00280 typedef MediaInfo_int64u (__stdcall *MEDIAINFO_Open_Buffer_Continue_GoTo_Get)(void*); static MEDIAINFO_Open_Buffer_Continue_GoTo_Get MediaInfo_Open_Buffer_Continue_GoTo_Get; 00281 typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Finalize)(void*); static MEDIAINFO_Open_Buffer_Finalize MediaInfo_Open_Buffer_Finalize; 00282 typedef size_t (__stdcall *MEDIAINFO_Open_NextPacket)(void*); static MEDIAINFO_Open_NextPacket MediaInfo_Open_NextPacket; 00283 typedef void (__stdcall *MEDIAINFO_Close)(void*); static MEDIAINFO_Close MediaInfo_Close; 00284 typedef void (__stdcall *MEDIAINFOLIST_Close)(void*, size_t); static MEDIAINFOLIST_Close MediaInfoList_Close; 00285 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Inform)(void*, size_t Reserved); static MEDIAINFO_Inform MediaInfo_Inform; 00286 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Inform)(void*, size_t, size_t Reserved); static MEDIAINFOLIST_Inform MediaInfoList_Inform; 00287 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_GetI)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber, size_t Parameter, MediaInfo_info_C KindOfInfo); static MEDIAINFO_GetI MediaInfo_GetI; 00288 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_GetI)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber, size_t Parameter, MediaInfo_info_C KindOfInfo); static MEDIAINFOLIST_GetI MediaInfoList_GetI; 00289 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Get)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber, const MediaInfo_Char* Parameter, MediaInfo_info_C KindOfInfo, MediaInfo_info_C KindOfSearch); static MEDIAINFO_Get MediaInfo_Get; 00290 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Get)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber, const MediaInfo_Char* Parameter, MediaInfo_info_C KindOfInfo, MediaInfo_info_C KindOfSearch); static MEDIAINFOLIST_Get MediaInfoList_Get; 00291 typedef size_t (__stdcall *MEDIAINFO_Output_Buffer_Get)(void*, const MediaInfo_Char* Parameter); static MEDIAINFO_Output_Buffer_Get MediaInfo_Output_Buffer_Get; 00292 typedef size_t (__stdcall *MEDIAINFO_Output_Buffer_GetI)(void*, size_t Pos); static MEDIAINFO_Output_Buffer_GetI MediaInfo_Output_Buffer_GetI; 00293 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Option)(void*, const MediaInfo_Char* Parameter, const MediaInfo_Char* Value); static MEDIAINFO_Option MediaInfo_Option; 00294 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Option)(void*, const MediaInfo_Char* Parameter, const MediaInfo_Char* Value); static MEDIAINFOLIST_Option MediaInfoList_Option; 00295 typedef size_t (__stdcall *MEDIAINFO_State_Get)(void*); static MEDIAINFO_State_Get MediaInfo_State_Get; 00296 typedef size_t (__stdcall *MEDIAINFOLIST_State_Get)(void*); static MEDIAINFOLIST_State_Get MediaInfoList_State_Get; 00297 typedef size_t (__stdcall *MEDIAINFO_Count_Get)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber); static MEDIAINFO_Count_Get MediaInfo_Count_Get; 00298 typedef size_t (__stdcall *MEDIAINFOLIST_Count_Get)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber); static MEDIAINFOLIST_Count_Get MediaInfoList_Count_Get; 00299 typedef size_t (__stdcall *MEDIAINFO_Count_Get_Files)(void*); static MEDIAINFO_Count_Get_Files MediaInfo_Count_Get_Files; 00300 typedef size_t (__stdcall *MEDIAINFOLIST_Count_Get_Files)(void*); static MEDIAINFOLIST_Count_Get_Files MediaInfoList_Count_Get_Files; 00301 00302 static size_t MediaInfoDLL_Load() 00303 { 00304 size_t Errors=0; 00305 00306 if (Module_Count>0) 00307 { 00308 Module_Count++; 00309 return 1; 00310 } 00311 00312 /* Load library */ 00313 #ifdef MEDIAINFO_GLIBC 00314 MediaInfo_Module=g_module_open(MEDIAINFODLL_NAME, G_MODULE_BIND_LAZY); 00315 #elif defined (_WIN32) || defined (WIN32) 00316 MediaInfo_Module=LoadLibrary(_T(MEDIAINFODLL_NAME)); 00317 #else 00318 MediaInfo_Module=dlopen(MEDIAINFODLL_NAME, RTLD_LAZY); 00319 if (!MediaInfo_Module) 00320 MediaInfo_Module=dlopen("./" MEDIAINFODLL_NAME, RTLD_LAZY); 00321 if (!MediaInfo_Module) 00322 MediaInfo_Module=dlopen("/usr/local/lib/" MEDIAINFODLL_NAME, RTLD_LAZY); 00323 if (!MediaInfo_Module) 00324 MediaInfo_Module=dlopen("/usr/local/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY); 00325 if (!MediaInfo_Module) 00326 MediaInfo_Module=dlopen("/usr/lib/" MEDIAINFODLL_NAME, RTLD_LAZY); 00327 if (!MediaInfo_Module) 00328 MediaInfo_Module=dlopen("/usr/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY); 00329 #endif 00330 if (!MediaInfo_Module) 00331 return (size_t)-1; 00332 00333 /* Load methods */ 00334 MEDIAINFO_ASSIGN (New,"New") 00335 MEDIAINFOLIST_ASSIGN(New,"New") 00336 MEDIAINFO_ASSIGN (Delete,"Delete") 00337 MEDIAINFOLIST_ASSIGN(Delete,"Delete") 00338 MEDIAINFO_ASSIGN (Open,"Open") 00339 MEDIAINFOLIST_ASSIGN(Open,"Open") 00340 MEDIAINFO_ASSIGN (Open_Buffer_Init,"Open_Buffer_Init") 00341 MEDIAINFO_ASSIGN (Open_Buffer_Continue,"Open_Buffer_Continue") 00342 MEDIAINFO_ASSIGN (Open_Buffer_Continue_GoTo_Get,"Open_Buffer_Continue_GoTo_Get") 00343 MEDIAINFO_ASSIGN (Open_Buffer_Finalize,"Open_Buffer_Finalize") 00344 MEDIAINFO_ASSIGN (Open_NextPacket,"Open_NextPacket") 00345 MEDIAINFO_ASSIGN (Close,"Close") 00346 MEDIAINFOLIST_ASSIGN(Close,"Close") 00347 MEDIAINFO_ASSIGN (Inform,"Inform") 00348 MEDIAINFOLIST_ASSIGN(Inform,"Inform") 00349 MEDIAINFO_ASSIGN (GetI,"GetI") 00350 MEDIAINFOLIST_ASSIGN(GetI,"GetI") 00351 MEDIAINFO_ASSIGN (Get,"Get") 00352 MEDIAINFOLIST_ASSIGN(Get,"Get") 00353 MEDIAINFO_ASSIGN (Output_Buffer_Get,"Output_Buffer_Get") 00354 MEDIAINFO_ASSIGN (Output_Buffer_GetI,"Output_Buffer_GetI") 00355 MEDIAINFO_ASSIGN (Option,"Option") 00356 MEDIAINFOLIST_ASSIGN(Option,"Option") 00357 MEDIAINFO_ASSIGN (State_Get,"State_Get") 00358 MEDIAINFOLIST_ASSIGN(State_Get,"State_Get") 00359 MEDIAINFO_ASSIGN (Count_Get,"Count_Get") 00360 MEDIAINFOLIST_ASSIGN(Count_Get,"Count_Get") 00361 MEDIAINFOLIST_ASSIGN(Count_Get_Files,"Count_Get_Files") 00362 if (Errors>0) 00363 { 00364 // Unload DLL with errors 00365 #ifdef MEDIAINFO_GLIBC 00366 g_module_close(MediaInfo_Module); 00367 #elif defined (_WIN32) || defined (WIN32) 00368 FreeLibrary(MediaInfo_Module); 00369 #else 00370 dlclose(MediaInfo_Module); 00371 #endif 00372 return (size_t)-1; 00373 } 00374 00375 Module_Count++; 00376 return (size_t)1; 00377 } 00378 00379 static size_t MediaInfoDLL_IsLoaded() 00380 { 00381 if (MediaInfo_Module) 00382 return 1; 00383 else 00384 return 0; 00385 } 00386 00387 static void MediaInfoDLL_UnLoad() 00388 { 00389 Module_Count--; 00390 if (Module_Count>0) 00391 return; 00392 00393 #ifdef MEDIAINFO_GLIBC 00394 g_module_close(MediaInfo_Module); 00395 #elif defined (_WIN32) || defined (WIN32) 00396 FreeLibrary(MediaInfo_Module); 00397 #else 00398 dlclose(MediaInfo_Module); 00399 #endif 00400 MediaInfo_Module=NULL; 00401 } 00402 00403 #ifdef __cplusplus 00404 } 00405 #endif /*__cplusplus*/ 00406 00407 /***************************************************************************/ 00408 /***************************************************************************/ 00409 /***************************************************************************/ 00410 00411 #ifdef __cplusplus 00412 //DLL C++ wrapper for C functions 00413 00414 //--------------------------------------------------------------------------- 00415 #include <string> 00416 #include <sstream> 00417 //--------------------------------------------------------------------------- 00418 00419 namespace MediaInfoDLL 00420 { 00421 00422 //--------------------------------------------------------------------------- 00423 //MediaInfo_Char types 00424 #undef _T 00425 #define _T(__x) __T(__x) 00426 #if defined(UNICODE) || defined (_UNICODE) 00427 typedef wchar_t Char; 00428 #undef __T 00429 #define __T(__x) L ## __x 00430 #else 00431 typedef char Char; 00432 #undef __T 00433 #define __T(__x) __x 00434 #endif 00435 typedef std::basic_string<Char> String; 00436 typedef std::basic_stringstream<Char> StringStream; 00437 const size_t Error=(size_t)(-1); 00438 //--------------------------------------------------------------------------- 00439 00440 //--------------------------------------------------------------------------- 00442 enum stream_t 00443 { 00444 Stream_General, 00445 Stream_Video, 00446 Stream_Audio, 00447 Stream_Text, 00448 Stream_Chapters, 00449 Stream_Image, 00450 Stream_Menu, 00451 Stream_Max, 00452 }; 00453 00455 enum info_t 00456 { 00457 Info_Name, 00458 Info_Text, 00459 Info_Measure, 00460 Info_Options, 00461 Info_Name_Text, 00462 Info_Measure_Text, 00463 Info_Info, 00464 Info_HowTo, 00465 Info_Max 00466 }; 00467 00472 enum infooptions_t 00473 { 00474 InfoOption_ShowInInform, 00475 InfoOption_Reserved, 00476 InfoOption_ShowInSupported, 00477 InfoOption_TypeOfValue, 00478 InfoOption_Max 00479 }; 00480 00482 enum fileoptions_t 00483 { 00484 FileOption_Nothing =0x00, 00485 FileOption_NoRecursive =0x01, 00486 FileOption_CloseAll =0x02, 00487 FileOption_Max =0x04 00488 }; 00489 00490 const String Unable_Load_DLL=_T("Unable to load ")_T(MEDIAINFODLL_NAME); 00491 #define MEDIAINFO_TEST_VOID \ 00492 if (!IsReady()) return 00493 #define MEDIAINFO_TEST_INT \ 00494 if (!IsReady()) return 0 00495 #define MEDIAINFO_TEST_STRING \ 00496 if (!IsReady()) return Unable_Load_DLL 00497 #define MEDIAINFO_TEST_STRING_STATIC \ 00498 if (!MediaInfo_Module) return Unable_Load_DLL 00499 00500 //--------------------------------------------------------------------------- 00501 class MediaInfo 00502 { 00503 public : 00504 MediaInfo () {if (!MediaInfo_Module) MediaInfoDLL_Load(); if (!MediaInfo_Module) {Handle=NULL; return;}; Handle=MediaInfo_New();}; 00505 ~MediaInfo () {MEDIAINFO_TEST_VOID; MediaInfo_Delete(Handle);}; 00506 00507 //File 00508 size_t Open (const String &File) {MEDIAINFO_TEST_INT; return MediaInfo_Open(Handle, File.c_str());}; 00509 size_t Open_Buffer_Init (MediaInfo_int64u File_Size=(MediaInfo_int64u)-1, MediaInfo_int64u File_Offset=0) {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Init(Handle, File_Size, File_Offset);}; 00510 size_t Open_Buffer_Continue (MediaInfo_int8u* Buffer, size_t Buffer_Size) {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size);}; 00511 MediaInfo_int64u Open_Buffer_Continue_GoTo_Get () {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle);}; 00512 size_t Open_Buffer_Finalize () {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Finalize(Handle);}; 00513 size_t Open_NextPacket () {MEDIAINFO_TEST_INT; return MediaInfo_Open_NextPacket(Handle);}; 00514 //size_t Save () {MEDIAINFO_TEST_INT; return MediaInfo_Save(Handle);}; 00515 void Close () {MEDIAINFO_TEST_VOID; return MediaInfo_Close(Handle);}; 00516 00517 //General information 00518 String Inform () {MEDIAINFO_TEST_STRING; return MediaInfo_Inform(Handle, 0);}; 00519 String Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind=Info_Text) {MEDIAINFO_TEST_STRING; return MediaInfo_GetI (Handle, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, (MediaInfo_info_C)InfoKind);}; 00520 String Get (stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind=Info_Text, info_t SearchKind=Info_Name) {MEDIAINFO_TEST_STRING; return MediaInfo_Get (Handle, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), (MediaInfo_info_C)InfoKind, (MediaInfo_info_C)SearchKind);}; 00521 //size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=_T("")) {MEDIAINFO_TEST_INT; return MediaInfo_SetI (Handle, ToSet.c_str(), (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, OldValue.c_str());}; 00522 //size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=_T("")) {MEDIAINFO_TEST_INT; return MediaInfo_Set (Handle, ToSet.c_str(), (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), OldValue.c_str());}; 00523 size_t Output_Buffer_Get (const String &Value) {return MediaInfo_Output_Buffer_Get(Handle, Value.c_str());} 00524 size_t Output_Buffer_Get (size_t Pos) {return MediaInfo_Output_Buffer_GetI(Handle, Pos);} 00525 String Option (const String &Option, const String &Value=_T("")) {MEDIAINFO_TEST_STRING; return MediaInfo_Option (Handle, Option.c_str(), Value.c_str());}; 00526 static String Option_Static (const String &Option, const String &Value=_T("")) {if (!MediaInfo_Module) MediaInfoDLL_Load(); MEDIAINFO_TEST_STRING_STATIC; return MediaInfo_Option (NULL, Option.c_str(), Value.c_str());}; 00527 size_t State_Get () {MEDIAINFO_TEST_INT; return MediaInfo_State_Get(Handle);}; 00528 size_t Count_Get (stream_t StreamKind, size_t StreamNumber=(size_t)-1) {MEDIAINFO_TEST_INT; return MediaInfo_Count_Get(Handle, (MediaInfo_stream_C)StreamKind, StreamNumber);}; 00529 00530 bool IsReady() {return (Handle && MediaInfo_Module)?true:false;} 00531 00532 private : 00533 void* Handle; 00534 }; 00535 00536 class MediaInfoList 00537 { 00538 public : 00539 MediaInfoList () {MediaInfoDLL_Load(); if (!MediaInfoDLL_IsLoaded()) {Handle=NULL; return;}; Handle=MediaInfoList_New();}; 00540 ~MediaInfoList () {MEDIAINFO_TEST_VOID; MediaInfoList_Delete(Handle); MediaInfoDLL_UnLoad();}; 00541 00542 //File 00543 size_t Open (const String &File, const fileoptions_t Options=FileOption_Nothing) {MEDIAINFO_TEST_INT; return MediaInfoList_Open(Handle, File.c_str(), (MediaInfo_fileoptions_C)Options);}; 00544 //size_t Save (size_t FilePos) {MEDIAINFO_TEST_INT; return MediaInfoList_Save(Handle, FilePos);}; 00545 void Close (size_t FilePos=(size_t)-1) {MEDIAINFO_TEST_VOID; return MediaInfoList_Close(Handle, FilePos);}; 00546 00547 //General information 00548 String Inform (size_t FilePos=(size_t)-1) {MEDIAINFO_TEST_STRING; return MediaInfoList_Inform(Handle, FilePos, 0);}; 00549 String Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind=Info_Text) {MEDIAINFO_TEST_STRING; return MediaInfoList_GetI (Handle, FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, (MediaInfo_info_C)InfoKind);}; 00550 String Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind=Info_Text, info_t SearchKind=Info_Name) {MEDIAINFO_TEST_STRING; return MediaInfoList_Get (Handle, FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), (MediaInfo_info_C)InfoKind, (MediaInfo_info_C)SearchKind);}; 00551 //size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=_T("")) {MEDIAINFO_TEST_INT; return MediaInfoList_SetI (Handle, ToSet.c_str(), FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter, OldValue.c_str());}; 00552 //size_t Set (const String &ToSet, size_t FilePos, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=_T("")) {MEDIAINFO_TEST_INT; return MediaInfoList_Set (Handle, ToSet.c_str(), FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber, Parameter.c_str(), OldValue.c_str());}; 00553 String Option (const String &Option, const String &Value=_T("")) {MEDIAINFO_TEST_STRING; return MediaInfoList_Option (Handle, Option.c_str(), Value.c_str());}; 00554 static String Option_Static (const String &Option, const String &Value=_T("")) {MEDIAINFO_TEST_STRING_STATIC; return MediaInfoList_Option (NULL, Option.c_str(), Value.c_str());}; 00555 size_t State_Get () {MEDIAINFO_TEST_INT; return MediaInfoList_State_Get(Handle);}; 00556 size_t Count_Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber=(size_t)-1) {MEDIAINFO_TEST_INT; return MediaInfoList_Count_Get(Handle, FilePos, (MediaInfo_stream_C)StreamKind, StreamNumber);}; 00557 size_t Count_Get () {MEDIAINFO_TEST_INT; return MediaInfoList_Count_Get_Files(Handle);}; 00558 00559 bool IsReady() {return (Handle && MediaInfo_Module)?true:false;} 00560 00561 private : 00562 void* Handle; 00563 }; 00564 00565 } //NameSpace 00566 #endif /*__cplusplus*/ 00567 00568 #endif