void MediaInfo_Config_MediaInfo::Event_Send (const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name) { CriticalSectionLocker CSL(CS); if (Event_CallBackFunction) Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler); else { MediaInfo_Event_Generic* Event_Generic=(MediaInfo_Event_Generic*)Data_Content; if ((Event_Generic->EventCode&0x00FFFF00)==(MediaInfo_Event_Global_Demux<<8)) { if (!MediaInfoLib::Config.Demux_Get()) return; if (File_Name.empty()) return; MediaInfo_Event_Global_Demux_0* Event=(MediaInfo_Event_Global_Demux_0*)Data_Content; Ztring File_Name_Final(File_Name); for (size_t Pos=0; Pos<Event->StreamIDs_Size; Pos++) File_Name_Final+=_T(".")+Ztring().From_Number(Event->StreamIDs[Pos], 16); File_Name_Final+=_T(".raw"); File F; F.Open(File_Name_Final, File::Access_Write_Append); F.Write(Event->Content, Event->Content_Size); } } }
//--------------------------------------------------------------------------- String MediaInfoList_Internal::Inform(size_t FilePos, size_t) { if (FilePos==Error) { Ztring Retour; unsigned int FilePos=0; ZtringListList MediaInfo_Custom_View; MediaInfo_Custom_View.Write(Option(_T("Inform_Get"))); Retour+=MediaInfo_Custom_View(Stream_Max+2, 1);//Page_Begin while (FilePos<Info.size()) { Retour+=Inform(FilePos); if (FilePos<Info.size()-1) Retour+=MediaInfo_Custom_View(Stream_Max+3, 1);//Page_Middle FilePos++; } Retour+=MediaInfo_Custom_View(Stream_Max+4, 1);//Page_End //Retour.FindAndReplace(_T("\\n"),_T( "\n"), 0, Ztring_Recursive); return Retour.c_str(); } CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0) return MediaInfoLib::Config.EmptyString_Get(); return Info[FilePos]->Inform(); }
void MediaInfo_Config_MediaInfo::Event_Send (const int8u* Data_Content, size_t Data_Size) { CriticalSectionLocker CSL(CS); if (Event_CallBackFunction) Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler); }
//--------------------------------------------------------------------------- String MediaInfoList_Internal::Inform(size_t FilePos, size_t) { if (FilePos==Error) { Ztring Retour; FilePos=0; ZtringListList MediaInfo_Custom_View; MediaInfo_Custom_View.Write(Option(_T("Inform_Get"))); bool XML=false; if (MediaInfoLib::Config.Inform_Get()==_T("XML")) XML=true; if (XML) Retour+=_T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")+MediaInfoLib::Config.LineSeparator_Get()+_T("<Mediainfo version=\"")+MediaInfoLib::Config.Info_Version_Get().SubString(_T(" v"), Ztring())+_T("\">")+MediaInfoLib::Config.LineSeparator_Get(); else Retour+=MediaInfo_Custom_View("Page_Begin"); while (FilePos<Info.size()) { Retour+=Inform(FilePos); if (FilePos<Info.size()-1) { Retour+=MediaInfo_Custom_View("Page_Middle"); } FilePos++; } if (XML) Retour+=_T("</Mediainfo>")+MediaInfoLib::Config.LineSeparator_Get(); else Retour+=MediaInfo_Custom_View("Page_End");// return Retour.c_str(); } CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0) return MediaInfoLib::Config.EmptyString_Get(); return Info[FilePos]->Inform(); }
//--------------------------------------------------------------------------- String MediaInfoList_Internal::Inform(size_t FilePos, size_t) { if (FilePos==Error) { Ztring Retour; FilePos=0; ZtringListList MediaInfo_Custom_View; MediaInfo_Custom_View.Write(Option(_T("Inform_Get"))); bool XML=false; if (MediaInfoLib::Config.Inform_Get()==_T("XML")) XML=true; if (XML) Retour+=_T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Mediainfo>\n"); else Retour+=MediaInfo_Custom_View(Stream_Max+2, 1);//Page_Begin while (FilePos<Info.size()) { Retour+=Inform(FilePos); if (FilePos<Info.size()-1) { Retour+=MediaInfo_Custom_View(Stream_Max+3, 1);//Page_Middle } FilePos++; } if (XML) Retour+=_T("</Mediainfo>\n"); else Retour+=MediaInfo_Custom_View(Stream_Max+4, 1);//Page_End //Retour.FindAndReplace(_T("\\n"),_T( "\n"), 0, Ztring_Recursive); return Retour.c_str(); } CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0) return MediaInfoLib::Config.EmptyString_Get(); return Info[FilePos]->Inform(); }
//--------------------------------------------------------------------------- String MediaInfoList_Internal::Option (const String &Option, const String &Value) { CriticalSectionLocker CSL(CS); Ztring OptionLower=Option; OptionLower.MakeLowerCase(); if (Option==_T("")) return _T(""); else if (OptionLower==_T("manguage_update")) { //Special case : Language_Update must update all MediaInfo classes for (unsigned int Pos=0; Pos<Info.size(); Pos++) if (Info[Pos]) Info[Pos]->Option(_T("language_update"), Value); return _T(""); } else if (OptionLower==_T("create_dummy")) { Info.resize(Info.size()+1); Info[Info.size()-1]=new MediaInfo(); Info[Info.size()-1]->Option(Option, Value); return _T(""); } else if (OptionLower==_T("thread")) { BlockMethod=1; return _T(""); } else if (OptionLower.find(_T("file_"))==0) { Config_MediaInfo_Items[Option]=Value; return _T(""); } else return MediaInfo::Option_Static(Option, Value); }
//--------------------------------------------------------------------------- void MediaInfoList_Internal::Close(size_t FilePos) { if (IsRunning()) { RequestTerminate(); while(IsExited()) Yield(); } CriticalSectionLocker CSL(CS); if (FilePos==Unlimited) { for (size_t Pos=0; Pos<Info.size(); Pos++) { delete Info[Pos]; Info[Pos]=NULL; } Info.clear(); } else if (FilePos<Info.size()) { delete Info[FilePos]; Info[FilePos]=NULL; Info.erase(Info.begin()+FilePos); } ToParse_AlreadyDone=0; ToParse_Total=0; }
static INLINE void Write(unsigned char reg, unsigned char value) { CSL(); SPI_BYTE(reg); SPI_BYTE(value); CSH(); }
//--------------------------------------------------------------------------- size_t MediaInfo_Internal::Open_Buffer_Init (int64u File_Size_, int64u File_Offset_) { CriticalSectionLocker CSL(CS); if (Info==NULL) { if (!Config.File_ForceParser_Get().empty()) { SelectFromExtension(Config.File_ForceParser_Get()); MultipleParsing_IsDetected=true; } else Info=new File__MultipleParsing; } #ifndef MEDIAINFO_MINIMIZESIZE Info->Init(&Config, &Details, &Stream, &Stream_More); #else //MEDIAINFO_MINIMIZESIZE Info->Init(&Config, &Stream, &Stream_More); #endif //MEDIAINFO_MINIMIZESIZE Info->Open_Buffer_Init(File_Size_, File_Offset_); //Saving the real file size, in case the user provide the theoritical file size, to be used instead of the real file size File_Size=File_Size_; return 1; }
Ztring MediaInfo_Config_PerPackage::Event_CallBackFunction_Set (const Ztring &Value) { ZtringList List=Value; CriticalSectionLocker CSL(CS); if (List.empty()) { Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)NULL; Event_UserHandler=NULL; } else for (size_t Pos=0; Pos<List.size(); Pos++) { if (List[Pos].find(__T("CallBack=memory://"))==0) Event_CallBackFunction=(MediaInfo_Event_CallBackFunction*)Ztring(List[Pos].substr(18, std::string::npos)).To_int64u(); else if (List[Pos].find(__T("UserHandle=memory://"))==0) Event_UserHandler=(void*)Ztring(List[Pos].substr(20, std::string::npos)).To_int64u(); else if (List[Pos].find(__T("UserHandler=memory://"))==0) Event_UserHandler=(void*)Ztring(List[Pos].substr(21, std::string::npos)).To_int64u(); else return("Problem during Event_CallBackFunction value parsing"); } return Ztring(); }
bool MediaInfo_Config_MediaInfo::File_Filter_HasChanged () { CriticalSectionLocker CSL(CS); bool File_Filter_HasChanged_Temp=File_Filter_HasChanged_; File_Filter_HasChanged_=false; return File_Filter_HasChanged_Temp; }
void MediaInfo_Config_PerPackage::Event_Send (File__Analyze* Source, const int8u* Data_Content, size_t Data_Size, const Ztring &File_Name) { CriticalSectionLocker CSL(CS); if (Event_CallBackFunction) Event_CallBackFunction ((unsigned char*)Data_Content, Data_Size, Event_UserHandler); }
void MediaInfo_Config_MediaInfo::File__Duplicate_Memory_Indexes_Erase (const Ztring &Value) { CriticalSectionLocker CSL(CS); size_t Pos=File__Duplicate_Memory_Indexes.Find(Value); if (Pos!=Error) File__Duplicate_Memory_Indexes[Pos].clear(); }
//--------------------------------------------------------------------------- size_t MediaInfoList_Internal::Open_Buffer_Continue (size_t FilePos, const int8u* ToAdd, size_t ToAdd_Size) { CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL) return 0; return Info[FilePos]->Open_Buffer_Continue(ToAdd, ToAdd_Size); }
//--------------------------------------------------------------------------- size_t MediaInfoList_Internal::Open_Buffer_Finalize (size_t FilePos) { CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL) return 0; return Info[FilePos]->Open_Buffer_Finalize(); }
//--------------------------------------------------------------------------- int64u MediaInfoList_Internal::Open_Buffer_Continue_GoTo_Get (size_t FilePos) { CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL) return (int64u)-1; return Info[FilePos]->Open_Buffer_Continue_GoTo_Get(); }
//--------------------------------------------------------------------------- //Destructeur MediaInfoList_Internal::~MediaInfoList_Internal() { Close(); CriticalSectionLocker CSL(CS); for (size_t Pos=0; Pos<Info.size(); Pos++) delete Info[Pos]; //Info[Pos]=NULL; }
//--------------------------------------------------------------------------- String MediaInfoList_Internal::Get(size_t FilePos, stream_t KindOfStream, size_t StreamNumber, const String &Parameter, info_t KindOfInfo, info_t KindOfSearch) { CriticalSectionLocker CSL(CS); if (FilePos==Error || FilePos>=Info.size() || Info[FilePos]==NULL || Info[FilePos]->Count_Get(Stream_General)==0) return MediaInfoLib::Config.EmptyString_Get(); return Info[FilePos]->Get(KindOfStream, StreamNumber, Parameter, KindOfInfo, KindOfSearch); }
//--------------------------------------------------------------------------- size_t MediaInfo_Internal::Output_Buffer_Get (size_t Pos) { CriticalSectionLocker CSL(CS); if (!Info) return 0; return Info->Output_Buffer_Get(Pos); }
//--------------------------------------------------------------------------- size_t MediaInfo_Internal::Output_Buffer_Get (const String &Value) { CriticalSectionLocker CSL(CS); if (!Info) return 0; return Info->Output_Buffer_Get(Value); }
//--------------------------------------------------------------------------- size_t MediaInfo_Internal::Set(const String &ToSet, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue) { CriticalSectionLocker CSL(CS); if (!Info) return 0; return Info->Set(StreamKind, StreamNumber, Parameter, ToSet, OldValue); }
//--------------------------------------------------------------------------- int64u MediaInfo_Internal::Open_Buffer_Continue_GoTo_Get () { CriticalSectionLocker CSL(CS); if (Info!=NULL) return Info->File_GoTo; else return 0; }
Ztring MediaInfo_Config_MediaInfo::File_Duplicate_Get (size_t AlreadyRead_Pos) { CriticalSectionLocker CSL(CS); if (AlreadyRead_Pos>=File__Duplicate_List.size()) return Ztring(); //Nothing or not more than the last time Ztring Temp=File__Duplicate_List[AlreadyRead_Pos]; return Temp; }
//--------------------------------------------------------------------------- size_t MediaInfoList_Internal::Count_Get (size_t FilePos, stream_t StreamKind, size_t StreamNumber) { CriticalSectionLocker CSL(CS); if (FilePos>=Info.size() || Info[FilePos]==NULL) return 0; return Info[FilePos]->Count_Get(StreamKind, StreamNumber); }
//--------------------------------------------------------------------------- MediaInfo_Internal::~MediaInfo_Internal() { Close(); CriticalSectionLocker CSL(CS);; delete Info; //Info=NULL; delete[] Buffer; //Buffer=NULL; delete (File*)File_Handle; //File_Handle=NULL; }
static INLINE unsigned char Read(unsigned char reg) { unsigned char value; CSL(); SPI_BYTE(reg); value = SPI_BYTE(0xFF); CSH(); return value; }
//--------------------------------------------------------------------------- size_t MediaInfoList_Internal::Open_Buffer_Init (int64u File_Size_, int64u File_Offset_) { MediaInfo* MI=new MediaInfo(); MI->Open_Buffer_Init(File_Size_, File_Offset_); CriticalSectionLocker CSL(CS); size_t Pos=Info.size(); Info.push_back(MI); return Pos; }
//--------------------------------------------------------------------------- void MediaInfo_Internal::Close() { CriticalSectionLocker CSL(CS); Stream.clear(); Stream.resize(Stream_Max); Stream_More.clear(); Stream_More.resize(Stream_Max); delete Info; Info=NULL; Buffer_Clear(); }
//--------------------------------------------------------------------------- size_t MediaInfoList_Internal::State_Get() { CriticalSectionLocker CSL(CS); if (State==10000) { //Pause(); IsInThread=false; } return State; }
//--------------------------------------------------------------------------- size_t MediaInfo_Internal::Open_Buffer_Finalize () { CriticalSectionLocker CSL(CS); if (Info!=NULL) { Info->Open_Buffer_Finalize(); Info->Finalize_Global(); } return 1; }