MediaInfoLib 0.7
|
00001 /* MediaInfoDLL - All info about media files, for DLL 00002 // Copyright (C) 2002-2012 MediaArea.net SARL, Info@MediaArea.net 00003 // 00004 // This library is free software: you can redistribute it and/or modify it 00005 // under the terms of the GNU Library General Public License as published by 00006 // the Free Software Foundation, either version 2 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 Library General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU Library 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 #ifdef _UNICODE 00133 #define MEDIAINFODLL_NAME L"MediaInfo.dll" 00134 #else //_UNICODE 00135 #define MEDIAINFODLL_NAME "MediaInfo.dll" 00136 #endif //_UNICODE 00137 #elif defined(__APPLE__) && defined(__MACH__) 00138 #define MEDIAINFODLL_NAME "libmediainfo.0.dylib" 00139 #define __stdcall 00140 #else 00141 #define MEDIAINFODLL_NAME "libmediainfo.so.0" 00142 #define __stdcall 00143 #endif //!defined(_WIN32) || defined (WIN32) 00144 00145 /*-------------------------------------------------------------------------*/ 00146 /*Char types */ 00147 #undef __T 00148 #define __T(__x) __T(__x) 00149 #if defined(UNICODE) || defined (_UNICODE) 00150 typedef wchar_t MediaInfo_Char; 00151 #undef __T 00152 #define __T(__x) L ## __x 00153 #define MEDIAINFO_Ansi "" 00154 #else 00155 typedef char MediaInfo_Char; 00156 #undef __T 00157 #define __T(__x) __x 00158 #define MEDIAINFO_Ansi "A" 00159 #endif 00160 /*-------------------------------------------------------------------------*/ 00161 00162 /*-------------------------------------------------------------------------*/ 00163 /*8-bit int */ 00164 typedef unsigned char MediaInfo_int8u; 00165 /*-------------------------------------------------------------------------*/ 00166 00167 /*-------------------------------------------------------------------------*/ 00168 /*64-bit int */ 00169 #if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__) 00170 #undef MAXTYPE_INT 00171 #define MAXTYPE_INT 64 00172 typedef unsigned long long MediaInfo_int64u; 00173 #elif defined(__WIN32__) || defined(_WIN32) 00174 #undef MAXTYPE_INT 00175 #define MAXTYPE_INT 64 00176 typedef unsigned __int64 MediaInfo_int64u; 00177 #else 00178 #pragma message This machine has no 64-bit integer type? 00179 #endif 00180 /*-------------------------------------------------------------------------*/ 00181 00182 /*-------------------------------------------------------------------------*/ 00183 /*NULL */ 00184 #ifndef NULL 00185 #define NULL 0 00186 #endif 00187 /*-------------------------------------------------------------------------*/ 00188 00190 typedef enum MediaInfo_stream_t { 00191 MediaInfo_Stream_General, 00192 MediaInfo_Stream_Video, 00193 MediaInfo_Stream_Audio, 00194 MediaInfo_Stream_Text, 00195 MediaInfo_Stream_Other, 00196 MediaInfo_Stream_Image, 00197 MediaInfo_Stream_Menu, 00198 MediaInfo_Stream_Max 00199 } MediaInfo_stream_C; 00200 00202 typedef enum MediaInfo_info_t { 00203 MediaInfo_Info_Name, 00204 MediaInfo_Info_Text, 00205 MediaInfo_Info_Measure, 00206 MediaInfo_Info_Options, 00207 MediaInfo_Info_Name_Text, 00208 MediaInfo_Info_Measure_Text, 00209 MediaInfo_Info_Info, 00210 MediaInfo_Info_HowTo, 00211 MediaInfo_Info_Max 00212 } MediaInfo_info_C; 00213 00215 typedef enum MediaInfo_infooptions_t { 00216 MediaInfo_InfoOption_ShowInInform, 00217 MediaInfo_InfoOption_Reserved, 00218 MediaInfo_InfoOption_ShowInSupported, 00219 MediaInfo_InfoOption_TypeOfValue, 00220 MediaInfo_InfoOption_Max 00221 } MediaInfo_infooptions_C; 00222 00224 typedef enum MediaInfo_fileoptions_t { 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)(); 00273 static MEDIAINFO_New MediaInfo_New; 00274 typedef void* (__stdcall *MEDIAINFOLIST_New)(); 00275 static MEDIAINFOLIST_New MediaInfoList_New; 00276 typedef void (__stdcall *MEDIAINFO_Delete)(void*); 00277 static MEDIAINFO_Delete MediaInfo_Delete; 00278 typedef void (__stdcall *MEDIAINFOLIST_Delete)(void*); 00279 static MEDIAINFOLIST_Delete MediaInfoList_Delete; 00280 typedef size_t (__stdcall *MEDIAINFO_Open)(void*, const MediaInfo_Char*); 00281 static MEDIAINFO_Open MediaInfo_Open; 00282 typedef size_t (__stdcall *MEDIAINFOLIST_Open)(void*, const MediaInfo_Char*, const MediaInfo_fileoptions_C); 00283 static MEDIAINFOLIST_Open MediaInfoList_Open; 00284 typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Init)(void*, MediaInfo_int64u File_Size, MediaInfo_int64u File_Offset); 00285 static MEDIAINFO_Open_Buffer_Init MediaInfo_Open_Buffer_Init; 00286 typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Continue)(void*, MediaInfo_int8u* Buffer, size_t Buffer_Size); 00287 static MEDIAINFO_Open_Buffer_Continue MediaInfo_Open_Buffer_Continue; 00288 typedef MediaInfo_int64u(__stdcall *MEDIAINFO_Open_Buffer_Continue_GoTo_Get)(void*); 00289 static MEDIAINFO_Open_Buffer_Continue_GoTo_Get MediaInfo_Open_Buffer_Continue_GoTo_Get; 00290 typedef size_t (__stdcall *MEDIAINFO_Open_Buffer_Finalize)(void*); 00291 static MEDIAINFO_Open_Buffer_Finalize MediaInfo_Open_Buffer_Finalize; 00292 typedef size_t (__stdcall *MEDIAINFO_Open_NextPacket)(void*); 00293 static MEDIAINFO_Open_NextPacket MediaInfo_Open_NextPacket; 00294 typedef void (__stdcall *MEDIAINFO_Close)(void*); 00295 static MEDIAINFO_Close MediaInfo_Close; 00296 typedef void (__stdcall *MEDIAINFOLIST_Close)(void*, size_t); 00297 static MEDIAINFOLIST_Close MediaInfoList_Close; 00298 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Inform)(void*, size_t Reserved); 00299 static MEDIAINFO_Inform MediaInfo_Inform; 00300 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Inform)(void*, size_t, size_t Reserved); 00301 static MEDIAINFOLIST_Inform MediaInfoList_Inform; 00302 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_GetI)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber, size_t Parameter, MediaInfo_info_C KindOfInfo); 00303 static MEDIAINFO_GetI MediaInfo_GetI; 00304 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_GetI)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber, size_t Parameter, MediaInfo_info_C KindOfInfo); 00305 static MEDIAINFOLIST_GetI MediaInfoList_GetI; 00306 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); 00307 static MEDIAINFO_Get MediaInfo_Get; 00308 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); 00309 static MEDIAINFOLIST_Get MediaInfoList_Get; 00310 typedef size_t (__stdcall *MEDIAINFO_Output_Buffer_Get)(void*, const MediaInfo_Char* Parameter); 00311 static MEDIAINFO_Output_Buffer_Get MediaInfo_Output_Buffer_Get; 00312 typedef size_t (__stdcall *MEDIAINFO_Output_Buffer_GetI)(void*, size_t Pos); 00313 static MEDIAINFO_Output_Buffer_GetI MediaInfo_Output_Buffer_GetI; 00314 typedef const MediaInfo_Char* (__stdcall *MEDIAINFO_Option)(void*, const MediaInfo_Char* Parameter, const MediaInfo_Char* Value); 00315 static MEDIAINFO_Option MediaInfo_Option; 00316 typedef const MediaInfo_Char* (__stdcall *MEDIAINFOLIST_Option)(void*, const MediaInfo_Char* Parameter, const MediaInfo_Char* Value); 00317 static MEDIAINFOLIST_Option MediaInfoList_Option; 00318 typedef size_t (__stdcall *MEDIAINFO_State_Get)(void*); 00319 static MEDIAINFO_State_Get MediaInfo_State_Get; 00320 typedef size_t (__stdcall *MEDIAINFOLIST_State_Get)(void*); 00321 static MEDIAINFOLIST_State_Get MediaInfoList_State_Get; 00322 typedef size_t (__stdcall *MEDIAINFO_Count_Get)(void*, MediaInfo_stream_C StreamKind, size_t StreamNumber); 00323 static MEDIAINFO_Count_Get MediaInfo_Count_Get; 00324 typedef size_t (__stdcall *MEDIAINFOLIST_Count_Get)(void*, size_t, MediaInfo_stream_C StreamKind, size_t StreamNumber); 00325 static MEDIAINFOLIST_Count_Get MediaInfoList_Count_Get; 00326 typedef size_t (__stdcall *MEDIAINFO_Count_Get_Files)(void*); 00327 static MEDIAINFO_Count_Get_Files MediaInfo_Count_Get_Files; 00328 typedef size_t (__stdcall *MEDIAINFOLIST_Count_Get_Files)(void*); 00329 static MEDIAINFOLIST_Count_Get_Files MediaInfoList_Count_Get_Files; 00330 00331 static size_t MediaInfoDLL_Load() 00332 { 00333 size_t Errors = 0; 00334 00335 if (Module_Count > 0) { 00336 Module_Count++; 00337 return 1; 00338 } 00339 00340 /* Load library */ 00341 #ifdef MEDIAINFO_GLIBC 00342 MediaInfo_Module = g_module_open(MEDIAINFODLL_NAME, G_MODULE_BIND_LAZY); 00343 #elif defined (_WIN32) || defined (WIN32) 00344 MediaInfo_Module = LoadLibrary(MEDIAINFODLL_NAME); 00345 #else 00346 MediaInfo_Module = dlopen(MEDIAINFODLL_NAME, RTLD_LAZY); 00347 if (!MediaInfo_Module) 00348 MediaInfo_Module = dlopen("./" MEDIAINFODLL_NAME, RTLD_LAZY); 00349 if (!MediaInfo_Module) 00350 MediaInfo_Module = dlopen("/usr/local/lib/" MEDIAINFODLL_NAME, RTLD_LAZY); 00351 if (!MediaInfo_Module) 00352 MediaInfo_Module = dlopen("/usr/local/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY); 00353 if (!MediaInfo_Module) 00354 MediaInfo_Module = dlopen("/usr/lib/" MEDIAINFODLL_NAME, RTLD_LAZY); 00355 if (!MediaInfo_Module) 00356 MediaInfo_Module = dlopen("/usr/lib64/" MEDIAINFODLL_NAME, RTLD_LAZY); 00357 #endif 00358 if (!MediaInfo_Module) 00359 return (size_t) - 1; 00360 00361 /* Load methods */ 00362 MEDIAINFO_ASSIGN(New, "New") 00363 MEDIAINFOLIST_ASSIGN(New, "New") 00364 MEDIAINFO_ASSIGN(Delete, "Delete") 00365 MEDIAINFOLIST_ASSIGN(Delete, "Delete") 00366 MEDIAINFO_ASSIGN(Open, "Open") 00367 MEDIAINFOLIST_ASSIGN(Open, "Open") 00368 MEDIAINFO_ASSIGN(Open_Buffer_Init, "Open_Buffer_Init") 00369 MEDIAINFO_ASSIGN(Open_Buffer_Continue, "Open_Buffer_Continue") 00370 MEDIAINFO_ASSIGN(Open_Buffer_Continue_GoTo_Get, "Open_Buffer_Continue_GoTo_Get") 00371 MEDIAINFO_ASSIGN(Open_Buffer_Finalize, "Open_Buffer_Finalize") 00372 MEDIAINFO_ASSIGN(Open_NextPacket, "Open_NextPacket") 00373 MEDIAINFO_ASSIGN(Close, "Close") 00374 MEDIAINFOLIST_ASSIGN(Close, "Close") 00375 MEDIAINFO_ASSIGN(Inform, "Inform") 00376 MEDIAINFOLIST_ASSIGN(Inform, "Inform") 00377 MEDIAINFO_ASSIGN(GetI, "GetI") 00378 MEDIAINFOLIST_ASSIGN(GetI, "GetI") 00379 MEDIAINFO_ASSIGN(Get, "Get") 00380 MEDIAINFOLIST_ASSIGN(Get, "Get") 00381 MEDIAINFO_ASSIGN(Output_Buffer_Get, "Output_Buffer_Get") 00382 MEDIAINFO_ASSIGN(Output_Buffer_GetI, "Output_Buffer_GetI") 00383 MEDIAINFO_ASSIGN(Option, "Option") 00384 MEDIAINFOLIST_ASSIGN(Option, "Option") 00385 MEDIAINFO_ASSIGN(State_Get, "State_Get") 00386 MEDIAINFOLIST_ASSIGN(State_Get, "State_Get") 00387 MEDIAINFO_ASSIGN(Count_Get, "Count_Get") 00388 MEDIAINFOLIST_ASSIGN(Count_Get, "Count_Get") 00389 MEDIAINFOLIST_ASSIGN(Count_Get_Files, "Count_Get_Files") 00390 if (Errors > 0) { 00391 // Unload DLL with errors 00392 #ifdef MEDIAINFO_GLIBC 00393 g_module_close(MediaInfo_Module); 00394 #elif defined (_WIN32) || defined (WIN32) 00395 FreeLibrary(MediaInfo_Module); 00396 #else 00397 dlclose(MediaInfo_Module); 00398 #endif 00399 MediaInfo_Module = NULL; 00400 return (size_t) - 1; 00401 } 00402 00403 Module_Count++; 00404 return (size_t)1; 00405 } 00406 00407 static size_t MediaInfoDLL_IsLoaded() 00408 { 00409 if (MediaInfo_Module) 00410 return 1; 00411 else 00412 return 0; 00413 } 00414 00415 static void MediaInfoDLL_UnLoad() 00416 { 00417 Module_Count--; 00418 if (Module_Count > 0) 00419 return; 00420 00421 #ifdef MEDIAINFO_GLIBC 00422 g_module_close(MediaInfo_Module); 00423 #elif defined (_WIN32) || defined (WIN32) 00424 FreeLibrary(MediaInfo_Module); 00425 #else 00426 dlclose(MediaInfo_Module); 00427 #endif 00428 MediaInfo_Module = NULL; 00429 } 00430 00431 #ifdef __cplusplus 00432 } 00433 #endif /*__cplusplus*/ 00434 00435 /***************************************************************************/ 00436 /***************************************************************************/ 00437 /***************************************************************************/ 00438 00439 #ifdef __cplusplus 00440 //DLL C++ wrapper for C functions 00441 00442 //--------------------------------------------------------------------------- 00443 #include <string> 00444 #include <sstream> 00445 //--------------------------------------------------------------------------- 00446 00447 namespace MediaInfoDLL 00448 { 00449 00450 //--------------------------------------------------------------------------- 00451 //MediaInfo_Char types 00452 #undef __T 00453 #define __T(__x) __T(__x) 00454 #if defined(UNICODE) || defined (_UNICODE) 00455 typedef wchar_t Char; 00456 #undef __T 00457 #define __T(__x) L ## __x 00458 #else 00459 typedef char Char; 00460 #undef __T 00461 #define __T(__x) __x 00462 #endif 00463 typedef std::basic_string<Char> String; 00464 typedef std::basic_stringstream<Char> StringStream; 00465 typedef std::basic_istringstream<Char> iStringStream; 00466 typedef std::basic_ostringstream<Char> oStringStream; 00467 typedef std::basic_istringstream<Char> tiStringStream; // Legacy 00468 typedef std::basic_ostringstream<Char> toStringStream; //Legacy 00469 const size_t Error = (size_t)(-1); 00470 //--------------------------------------------------------------------------- 00471 00472 //--------------------------------------------------------------------------- 00474 enum stream_t { 00475 Stream_General, 00476 Stream_Video, 00477 Stream_Audio, 00478 Stream_Text, 00479 Stream_Other, 00480 Stream_Image, 00481 Stream_Menu, 00482 Stream_Max 00483 }; 00484 00486 enum info_t { 00487 Info_Name, 00488 Info_Text, 00489 Info_Measure, 00490 Info_Options, 00491 Info_Name_Text, 00492 Info_Measure_Text, 00493 Info_Info, 00494 Info_HowTo, 00495 Info_Max 00496 }; 00497 00502 enum infooptions_t { 00503 InfoOption_ShowInInform, 00504 InfoOption_Reserved, 00505 InfoOption_ShowInSupported, 00506 InfoOption_TypeOfValue, 00507 InfoOption_Max 00508 }; 00509 00511 enum fileoptions_t { 00512 FileOption_Nothing = 0x00, 00513 FileOption_NoRecursive = 0x01, 00514 FileOption_CloseAll = 0x02, 00515 FileOption_Max = 0x04 00516 }; 00517 00518 const String Unable_Load_DLL = __T("Unable to load ")MEDIAINFODLL_NAME; 00519 #define MEDIAINFO_TEST_VOID \ 00520 if (!IsReady()) return 00521 #define MEDIAINFO_TEST_INT \ 00522 if (!IsReady()) return 0 00523 #define MEDIAINFO_TEST_STRING \ 00524 if (!IsReady()) return Unable_Load_DLL 00525 #define MEDIAINFO_TEST_STRING_STATIC \ 00526 if (!MediaInfo_Module) return Unable_Load_DLL 00527 00528 //--------------------------------------------------------------------------- 00529 class MediaInfo 00530 { 00531 public : 00532 MediaInfo() {if (!MediaInfo_Module) MediaInfoDLL_Load(); if (!MediaInfo_Module) {Handle = NULL; return;}; Handle = MediaInfo_New();}; 00533 ~MediaInfo() {MEDIAINFO_TEST_VOID; MediaInfo_Delete(Handle);}; 00534 00535 //File 00536 size_t Open(const String &File) {MEDIAINFO_TEST_INT; return MediaInfo_Open(Handle, File.c_str());}; 00537 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);}; 00538 size_t Open_Buffer_Continue(MediaInfo_int8u* Buffer, size_t Buffer_Size) {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size);}; 00539 MediaInfo_int64u Open_Buffer_Continue_GoTo_Get() {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle);}; 00540 size_t Open_Buffer_Finalize() {MEDIAINFO_TEST_INT; return MediaInfo_Open_Buffer_Finalize(Handle);}; 00541 size_t Open_NextPacket() {MEDIAINFO_TEST_INT; return MediaInfo_Open_NextPacket(Handle);}; 00542 //size_t Save () {MEDIAINFO_TEST_INT; return MediaInfo_Save(Handle);}; 00543 void Close() {MEDIAINFO_TEST_VOID; return MediaInfo_Close(Handle);}; 00544 00545 //General information 00546 String Inform() {MEDIAINFO_TEST_STRING; return MediaInfo_Inform(Handle, 0);}; 00547 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);}; 00548 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);}; 00549 //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());}; 00550 //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());}; 00551 size_t Output_Buffer_Get(const String &Value) {return MediaInfo_Output_Buffer_Get(Handle, Value.c_str());} 00552 size_t Output_Buffer_Get(size_t Pos) {return MediaInfo_Output_Buffer_GetI(Handle, Pos);} 00553 String Option(const String &Option, const String &Value = __T("")) {MEDIAINFO_TEST_STRING; return MediaInfo_Option(Handle, Option.c_str(), Value.c_str());}; 00554 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());}; 00555 size_t State_Get() {MEDIAINFO_TEST_INT; return MediaInfo_State_Get(Handle);}; 00556 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);}; 00557 00558 bool IsReady() {return (Handle && MediaInfo_Module) ? true : false;} 00559 00560 private : 00561 void* Handle; 00562 }; 00563 00564 class MediaInfoList 00565 { 00566 public : 00567 MediaInfoList() {MediaInfoDLL_Load(); if (!MediaInfoDLL_IsLoaded()) {Handle = NULL; return;}; Handle = MediaInfoList_New();}; 00568 ~MediaInfoList() {MEDIAINFO_TEST_VOID; MediaInfoList_Delete(Handle); MediaInfoDLL_UnLoad();}; 00569 00570 //File 00571 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);}; 00572 //size_t Save (size_t FilePos) {MEDIAINFO_TEST_INT; return MediaInfoList_Save(Handle, FilePos);}; 00573 void Close(size_t FilePos = (size_t) - 1) {MEDIAINFO_TEST_VOID; return MediaInfoList_Close(Handle, FilePos);}; 00574 00575 //General information 00576 String Inform(size_t FilePos = (size_t) - 1) {MEDIAINFO_TEST_STRING; return MediaInfoList_Inform(Handle, FilePos, 0);}; 00577 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);}; 00578 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);}; 00579 //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());}; 00580 //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());}; 00581 String Option(const String &Option, const String &Value = __T("")) {MEDIAINFO_TEST_STRING; return MediaInfoList_Option(Handle, Option.c_str(), Value.c_str());}; 00582 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());}; 00583 size_t State_Get() {MEDIAINFO_TEST_INT; return MediaInfoList_State_Get(Handle);}; 00584 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);}; 00585 size_t Count_Get() {MEDIAINFO_TEST_INT; return MediaInfoList_Count_Get_Files(Handle);}; 00586 00587 bool IsReady() {return (Handle && MediaInfo_Module) ? true : false;} 00588 00589 private : 00590 void* Handle; 00591 }; 00592 00593 } //NameSpace 00594 #endif /*__cplusplus*/ 00595 00596 #endif