MediaInfo buffer usage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Copyright (c) MediaArea.net SARL. All Rights Reserved. | |
* | |
* Use of this source code is governed by a BSD-style license that can | |
* be found in the License.html file in the root of the source tree. | |
*/ | |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
// Linux: g++ -o howtouse HowToUse_Dll.cpp -lmediainfo -lzen -ldl | |
// Windows: cl /Fehowtouse.exe HowToUse_Dll.cpp | |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
#ifdef MEDIAINFO_LIBRARY | |
#include "MediaInfo/MediaInfo.h" //Staticly-loaded library (.lib or .a or .so) | |
#define MediaInfoNameSpace MediaInfoLib; | |
#else //MEDIAINFO_LIBRARY | |
#include "MediaInfoDLL/MediaInfoDLL.h" //Dynamicly-loaded library (.dll or .so) | |
#define MediaInfoNameSpace MediaInfoDLL; | |
#endif //MEDIAINFO_LIBRARY | |
#include <iostream> | |
#include <iomanip> | |
using namespace MediaInfoNameSpace; | |
#ifdef __MINGW32__ | |
#ifdef _UNICODE | |
#define _itot _itow | |
#else //_UNICODE | |
#define _itot itoa | |
#endif //_UNICODE | |
#endif //__MINGW32 | |
//*************************************************************************** | |
// By buffer example | |
//*************************************************************************** | |
//--------------------------------------------------------------------------- | |
//Note: you can replace file operations by your own buffer management class | |
#include <stdio.h> | |
int main (int argc, Char *argv[]) | |
{ | |
//From: preparing an example file for reading | |
FILE* F=fopen("test2.mov", "rb"); //You can use something else than a file | |
if (F==0) | |
return 1; | |
//From: preparing a memory buffer for reading | |
unsigned char* From_Buffer=new unsigned char[7*188]; //Note: you can do your own buffer | |
size_t From_Buffer_Size; //The size of the read file buffer | |
//From: retrieving file size | |
fseek(F, 0, SEEK_END); | |
long F_Size=ftell(F); | |
fseek(F, 0, SEEK_SET); | |
//Initializing MediaInfo | |
MediaInfo MI; | |
MI.Option(__T("ParseSpeed"), __T("0")); | |
//Preparing to fill MediaInfo with a buffer | |
MI.Open_Buffer_Init(F_Size, 0); | |
//The parsing loop | |
int totalRead = 0; | |
do | |
{ | |
//Reading data somewhere, do what you want for this. | |
From_Buffer_Size=fread(From_Buffer, 1, 7*188, F); | |
totalRead += From_Buffer_Size; | |
printf("Read %ld bytes.\n", From_Buffer_Size); | |
//Sending the buffer to MediaInfo | |
size_t Status=MI.Open_Buffer_Continue(From_Buffer, From_Buffer_Size); | |
if (Status&0x08) //Bit3=Finished | |
break; | |
//Testing if there is a MediaInfo request to go elsewhere | |
MediaInfo_int64u seekPos = MI.Open_Buffer_Continue_GoTo_Get(); | |
if (seekPos!=(MediaInfo_int64u)-1) | |
{ | |
printf("Seeking to offset %lld.", seekPos); | |
fseek(F, (long)seekPos, SEEK_SET); //Position the file | |
MI.Open_Buffer_Init(F_Size, ftell(F)); //Informing MediaInfo we have seek | |
} | |
} | |
while (From_Buffer_Size>0); | |
printf("Done, read %d bytes in total.\n", totalRead); | |
//Finalizing | |
MI.Open_Buffer_Finalize(); //This is the end of the stream, MediaInfo must finnish some work | |
//Get() example | |
String To_Display=MI.Get(Stream_General, 0, __T("Format")); | |
#ifdef _UNICODE | |
std::wcout << To_Display << std::endl; | |
#else | |
std::cout << To_Display << std::endl; | |
#endif | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment