int Test_Version(char* FileName_, char* Begin, char* End) { wxString FileName=Ztring().From_Local(FileName_).c_str(); //Opening File F.Open(FileName); I=F.Read(C, 1000000); if (!I) { ToShow+=__T("Error opening ")+FileName; return -1; } //Getting information C[I]=0; Z.From_Local(C); Z=Z.SubString(Ztring().From_Local(Begin), Ztring().From_Local(End)); //deleting extra bytes if (Z[Z.size()-1]=='\n') Z.resize(Z.size()-1); if (Z[Z.size()-1]=='\r') Z.resize(Z.size()-1); //Testing validity if (Z.size()!=3 && Z.size()!=7) //non long, no short { ToShow+=__T("Error reading ")+FileName; return -2; } //Reformtation information Z.FindAndReplace(__T(","), __T("."), 0, Ztring_Recursive); if (Z!=Version && Z!=Version_Short) { ToShow+=FileName; ToShow+=__T(" is not good : version is marked "); ToShow+=Z; ToShow+=__T("\r\n"); } return 0; }
//--------------------------------------------------------------------------- void PBCore_Transform__Common_End(Ztring &ToReturn, MediaInfo_Internal &MI, stream_t StreamKind, size_t StreamPos) { //essenceTrackAnnotation - all fields (except *_String*) separated by | Ztring Temp; for (size_t Pos=0; Pos<MI.Count_Get(StreamKind, StreamPos); Pos++) if (MI.Get(StreamKind, StreamPos, Pos, Info_Name).find(__T("String"))==std::string::npos && !MI.Get(StreamKind, StreamPos, Pos).empty()) Temp+=MI.Get(StreamKind, StreamPos, Pos, Info_Name)+__T(": ")+MI.Get(StreamKind, StreamPos, Pos)+__T('|'); if (!Temp.empty()) { Temp.resize(Temp.size()-1); ToReturn+=__T("\t\t\t<essenceTrackAnnotation>"); ToReturn+=Temp; ToReturn+=__T("</essenceTrackAnnotation>\n"); } }
Ztring ZtringListList::Read1 (size_type Pos1) const { Ztring ToReturn; size_type Size=size()-1; for (size_type Pos=0; Pos<Size; Pos++) ToReturn+=operator[](Pos).Read(Pos1)+Separator[0]; ToReturn+=operator[](Size).Read(Pos1); //Delete all useless separators at the end if(ToReturn(ToReturn.size()-1)==Separator[0][Separator[0].size()-1]) //Optimize speed while (ToReturn.find(Separator[0].c_str(), ToReturn.size()-Separator[0].size())!=std::string::npos) ToReturn.resize(ToReturn.size()-Separator[0].size()); return ToReturn; }
//--------------------------------------------------------------------------- // Read Ztring ZtringListList::Read () const { //Integrity if (size()==0) return _T(""); Ztring ToReturn; size_type Size=size()-1; for (size_type Pos0=0; Pos0<Size; Pos0++) ToReturn+=Read(Pos0)+Separator[0]; ToReturn+=Read(Size); //Delete all useless separators at the end if(ToReturn.size()>0 && Separator[0].size() && ToReturn(ToReturn.size()-1)==Separator[0][Separator[0].size()-1]) //Optimize speed while (ToReturn.find(Separator[0].c_str(), ToReturn.size()-Separator[0].size())!=std::string::npos) ToReturn.resize(ToReturn.size()-Separator[0].size()); return ToReturn; }
//--------------------------------------------------------------------------- // Read Ztring ZtringList::Read () const { //Integrity if (size()==0) return _T(""); Ztring Retour; for (size_type Pos=0; Pos<size(); Pos++) { if (operator[](Pos).find(Separator[0])==std::string::npos) Retour+=operator[](Pos)+Separator[0]; else Retour+=Quote+operator[](Pos)+Quote+Separator[0]; } //delete all useless separators at the end while (Retour.find(Separator[0].c_str(), Retour.size()-Separator[0].size())!=std::string::npos) Retour.resize(Retour.size()-Separator[0].size()); return Retour; }
//--------------------------------------------------------------------------- // Read Ztring ZtringList::Read () const { //Integrity if (size()==0) return Ztring(); Ztring Retour; Ztring ToFind=Separator[0]+Quote[0]+__T("\r\n"); for (size_type Pos=0; Pos<size(); Pos++) { if (operator[](Pos).find_first_of(ToFind)==std::string::npos) Retour+=operator[](Pos)+Separator[0]; else if (operator[](Pos).find(Separator[0])==std::string::npos && operator[](Pos).find(Quote)==std::string::npos && operator[](Pos).find('\r')==std::string::npos && operator[](Pos).find('\n')==std::string::npos) Retour+=operator[](Pos)+Separator[0]; else { if (operator[](Pos).find(Quote)==std::string::npos) Retour+=Quote+operator[](Pos)+Quote+Separator[0]; else { Ztring Value=operator[](Pos); Value.FindAndReplace(Quote, Quote+Quote, 0, Ztring_Recursive); Retour+=Quote+Value+Quote+Separator[0]; } } } //delete all useless separators at the end //while (Retour.find(Separator[0].c_str(), Retour.size()-Separator[0].size())!=std::string::npos) if (Retour.find(Separator[0].c_str(), Retour.size()-Separator[0].size())!=std::string::npos) Retour.resize(Retour.size()-Separator[0].size()); return Retour; }
//--------------------------------------------------------------------------- void File_Jpeg::SIZ() { //Parsing vector<float> SamplingFactors; vector<int8u> BitDepths; int8u SamplingFactors_Max=0; int32u Xsiz, Ysiz; int16u Count; Skip_B2( "Rsiz - Capability of the codestream"); Get_B4 (Xsiz, "Xsiz - Image size X"); Get_B4 (Ysiz, "Ysiz - Image size Y"); Skip_B4( "XOsiz - Image offset X"); Skip_B4( "YOsiz - Image offset Y"); Skip_B4( "tileW - Size of tile W"); Skip_B4( "tileH - Size of tile H"); Skip_B4( "XTOsiz - Upper-left tile offset X"); Skip_B4( "YTOsiz - Upper-left tile offset Y"); Get_B2 (Count, "Components and initialize related arrays"); for (int16u Pos=0; Pos<Count; Pos++) { Element_Begin1("Initialize related array"); int8u BitDepth = 0, compSubsX = 0, compSubsY = 0; BS_Begin(); Skip_SB( "Signed"); Get_S1 (7, BitDepth, "BitDepth"); Param_Info1(1+BitDepth); Element_Info1(1+BitDepth); BS_End(); Get_B1 ( compSubsX, "compSubsX"); Element_Info1(compSubsX); Get_B1 ( compSubsY, "compSubsY"); Element_Info1(compSubsY); Element_End0(); //Filling list of HiVi if (compSubsX) { SamplingFactors.push_back(((float)compSubsY)/compSubsX); if (((float)compSubsY)/compSubsX>SamplingFactors_Max) SamplingFactors_Max=(int8u)((float)compSubsY)/compSubsX; } if (BitDepths.empty() || BitDepth!=BitDepths[0]) BitDepths.push_back(BitDepth); } FILLING_BEGIN_PRECISE(); if (Frame_Count==0 && Field_Count==0) { Accept("JPEG 2000"); if (Count_Get(StreamKind_Last)==0) Stream_Prepare(StreamKind_Last); Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Format), "JPEG 2000"); Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_Codec), "JPEG 2000"); if (StreamKind_Last==Stream_Image) Fill(Stream_Image, 0, Image_Codec_String, "JPEG 2000", Unlimited, true, true); //To Avoid automatic filling Fill(StreamKind_Last, 0, StreamKind_Last==Stream_Image?(size_t)Image_Width:(size_t)Video_Width, Xsiz); Fill(StreamKind_Last, 0, StreamKind_Last==Stream_Image?(size_t)Image_Height:(size_t)Video_Height, Ysiz*(Interlaced?2:1)); //If image is from interlaced content, must multiply height by 2 if (BitDepths.size()==1) Fill(StreamKind_Last, 0, Fill_Parameter(StreamKind_Last, Generic_BitDepth), 1+BitDepths[0]); //Chroma subsampling if (SamplingFactors_Max) while (SamplingFactors_Max<4) { for (size_t Pos=0; Pos<SamplingFactors.size(); Pos++) SamplingFactors[Pos]*=2; SamplingFactors_Max*=2; } while (SamplingFactors.size()<3) SamplingFactors.push_back(0); Ztring ChromaSubsampling; for (size_t Pos=0; Pos<SamplingFactors.size(); Pos++) ChromaSubsampling+=Ztring::ToZtring(SamplingFactors[Pos], 0)+__T(':'); if (!ChromaSubsampling.empty()) { ChromaSubsampling.resize(ChromaSubsampling.size()-1); Fill(StreamKind_Last, 0, "ChromaSubsampling", ChromaSubsampling); } } FILLING_END(); }
void File_OtherText::Read_Buffer_Continue() { if (Buffer_Size<0x200) { Element_WaitForMoreData(); return; } Element_Offset=File_Size-(File_Offset+Buffer_Offset); Ztring Format, FormatMore, Codec; Ztring File; ZtringList Lines; //Feed File and Lines File.From_UTF8((const char*)Buffer, Buffer_Size>65536?65536:Buffer_Size); if (File.empty()) File.From_Local((const char*)Buffer, Buffer_Size>65536?65536:Buffer_Size); // Trying from local code page if (File.size()<0x100) { File.From_Unicode((wchar_t*)Buffer, 0, Buffer_Size/sizeof(wchar_t)); //Unicode with BOM //TODO: Order of bytes (big or Little endian) if (File.size()<0x100) { Reject("Other text"); return; } } if (File.size()>0x1000) File.resize(0x1000); //Do not work on too big File.FindAndReplace(__T("\r\n"), __T("\n"), 0, Ztring_Recursive); File.FindAndReplace(__T("\r"), __T("\n"), 0, Ztring_Recursive); Lines.Separator_Set(0, __T("\n")); Lines.Write(File); Lines.resize(0x20); if (Lines[0]==__T("[Script Info]") && (Lines.Find(__T("ScriptType: v4.00"))!=Error || Lines.Find(__T("Script Type: V4.00"))!=Error) && Lines.Find(__T("[V4 Styles]"))!=Error ) { Format=__T("SSA"); FormatMore=__T("SubStation Alpha"); Codec=__T("SSA"); } else if (Lines[0]==__T("[Script Info]") && (Lines.Find(__T("ScriptType: v4.00+"))!=Error || Lines.Find(__T("Script Type: V4.00+"))!=Error) && Lines.Find(__T("[V4+ Styles]"))!=Error ) { Format=__T("ASS"); FormatMore=__T("Advanced SubStation Alpha"); Codec=__T("ASS"); } else if (Lines[0].size()>24 && Lines[0][ 0]==__T('0') && Lines[0][ 1]==__T('0') && Lines[0][ 2]==__T(':') && Lines[0][ 5]==__T(':') && Lines[0][ 8]==__T(':') && Lines[0][11]==__T(' ') && Lines[0][12]==__T('0') && Lines[0][13]==__T('0') && Lines[0][14]==__T(':') && Lines[0][17]==__T(':') && Lines[0][20]==__T(':') && Lines[0][23]==__T(' ') ) { Format=__T("Adobe encore DVD"); Codec=__T("Adobe"); } else if (Lines[0].size()==11 && Lines[0][0]==__T('-') && Lines[0][1]==__T('-') && Lines[0][2]==__T('>') && Lines[0][3]==__T('>') && Lines[0][4]==__T(' ') && Lines[0][5]==__T('0') && Lines[1].empty()!=true ) { Format=__T("AQTitle"); Codec=__T("AQTitle"); } else if (Lines[0].size()>28 && Lines[0][ 0]==__T('0') && Lines[0][ 1]==__T('0') && Lines[0][ 2]==__T(':') && Lines[0][ 5]==__T(':') && Lines[0][ 8]==__T(':') && Lines[0][11]==__T(' ') && Lines[0][12]==__T(',') && Lines[0][13]==__T(' ') && Lines[0][14]==__T('0') && Lines[0][15]==__T('0') && Lines[0][16]==__T(':') && Lines[0][19]==__T(':') && Lines[0][22]==__T(':') && Lines[0][25]==__T(' ') && Lines[0][16]==__T(',') && Lines[0][27]==__T(' ') ) { Format=__T("Captions 32"); Codec=__T("Caption 32"); } else if (Lines[0].size()==23 && Lines[0]==__T("*Timecode type: PAL/EBU") && Lines[1].empty() && Lines[2].size()==23 && Lines[2][ 0]==__T('0') && Lines[2][ 1]==__T('0') && Lines[2][ 2]==__T(':') && Lines[2][ 5]==__T(':') && Lines[2][ 8]==__T(':') && Lines[2][11]==__T(' ') && Lines[2][12]==__T('0') && Lines[2][13]==__T('0') && Lines[2][14]==__T(':') && Lines[2][17]==__T(':') && Lines[2][20]==__T(':') && Lines[2].size()>0 ) { Format=__T("Captions Inc"); Codec=__T("Captions inc"); } else if (Lines[0].size()>1 && Lines[0][0]==__T('*') && Lines.Find(__T("** Caption Number 1"))!=Error ) { Format=__T("Cheeta"); } else if (Lines[0].size()>10 && Lines[0][0]==__T('~') && Lines[0][1]==__T('C') && Lines[0][2]==__T('P') && Lines[0][3]==__T('C') && Lines[0][9]==__T('~') && Lines[1][ 0]==__T('0') && Lines[1][ 1]==__T('0') && Lines[1][ 2]==__T(':') && Lines[1][ 5]==__T(':') && Lines[1][ 8]==__T(':') ) { Format=__T("CPC Captioning"); Codec=__T("CPC Captioning"); } else if (Lines[0].find(__T("<SAMI>"))==0) { Format=__T("SAMI"); } else return; if (Format.empty()) return; Accept("Other text"); if (!IsSub) { Fill(Stream_General, 0, General_Format, Format); Fill(Stream_General, 0, General_Format_Info, FormatMore, true); } Stream_Prepare(Stream_Text); Fill(Stream_Text, 0, Text_Format, Format); Fill(Stream_Text, 0, Text_Codec, Codec); //No more need data Element_Begin1(Format); Element_End0(); Finish("Other text"); }
//--------------------------------------------------------------------------- void PBCore_Transform(Ztring &ToReturn, MediaInfo_Internal &MI, stream_t StreamKind, size_t StreamPos) { //Menu: only if TimeCode if (StreamKind==Stream_Menu && MI.Get(Stream_Menu, StreamPos, Menu_Format)!=__T("TimeCode")) return; //essenceTrackType Ztring essenceTrackType; switch (StreamKind) { case Stream_Video: essenceTrackType=__T("Video"); break; case Stream_Audio: essenceTrackType=__T("Audio"); break; case Stream_Text: { Ztring Format=MI.Get(Stream_Text, StreamPos, Text_Format); if (Format==__T("EIA-608") || Format==__T("EIA-708")) essenceTrackType=__T("CC"); else essenceTrackType=__T("Text"); } break; case Stream_Menu: if (MI.Get(Stream_Menu, StreamPos, Menu_Format)==__T("TimeCode")) { essenceTrackType=__T("TimeCode"); break; } else return; //Not supported default: return; //Not supported } ToReturn+=__T("\t\t<pbcoreEssenceTrack>\n"); ToReturn+=__T("\t\t\t<essenceTrackType>")+essenceTrackType+__T("</essenceTrackType>\n"); //essenceTrackIdentifier if (!MI.Get(StreamKind, StreamPos, __T("ID")).empty()) { ToReturn+=__T("\t\t\t<essenceTrackIdentifier>")+MI.Get(StreamKind, StreamPos, __T("ID"))+__T("</essenceTrackIdentifier>\n"); ToReturn+=__T("\t\t\t<essenceTrackIdentifierSource>ID (Mediainfo)</essenceTrackIdentifierSource>\n"); } else if (!MI.Get(StreamKind, StreamPos, __T("UniqueID")).empty()) { ToReturn+=__T("\t\t\t<essenceTrackIdentifier>")+MI.Get(StreamKind, StreamPos, __T("UniqueID"))+__T("</essenceTrackIdentifier>\n"); ToReturn+=__T("\t\t\t<essenceTrackIdentifierSource>UniqueID (Mediainfo)</essenceTrackIdentifierSource>\n"); } else if (!MI.Get(StreamKind, StreamPos, __T("StreamKindID")).empty()) { ToReturn+=__T("\t\t\t<essenceTrackIdentifier>")+MI.Get(StreamKind, StreamPos, __T("StreamKindID"))+__T("</essenceTrackIdentifier>\n"); ToReturn+=__T("\t\t\t<essenceTrackIdentifierSource>StreamKindID (Mediainfo)</essenceTrackIdentifierSource>\n"); } //essenceTrackStandard if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_Standard).empty()) ToReturn+=__T("\t\t\t<essenceTrackStandard>")+MI.Get(Stream_Video, StreamPos, Video_Standard)+__T("</essenceTrackStandard>\n"); //essenceTrackEncoding if (!MI.Get(StreamKind, StreamPos, __T("Format")).empty()) { ToReturn+=__T("\t\t\t<essenceTrackEncoding>"); ToReturn+=MI.Get(StreamKind, StreamPos, __T("Format")); if (!MI.Get(StreamKind, StreamPos, __T("Format_Profile")).empty()) ToReturn+=__T(' ')+MI.Get(StreamKind, StreamPos, __T("Format_Profile")); if (!MI.Get(StreamKind, StreamPos, __T("CodecID")).empty()) ToReturn+=__T(" (")+MI.Get(StreamKind, StreamPos, __T("CodecID"))+__T(')'); ToReturn+=__T("</essenceTrackEncoding>\n"); } //essenceTrackDataRate if (!MI.Get(StreamKind, StreamPos, __T("BitRate")).empty()) { ToReturn+=__T("\t\t\t<essenceTrackDataRate>"); ToReturn+=MI.Get(StreamKind, StreamPos, __T("BitRate")); if (!MI.Get(StreamKind, StreamPos, __T("BitRate_Mode")).empty()) ToReturn+=__T(' ')+MI.Get(StreamKind, StreamPos, __T("BitRate_Mode")); ToReturn+=__T("</essenceTrackDataRate>\n"); } //essenceTrackFrameRate if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_FrameRate).empty()) { ToReturn+=__T("\t\t\t<essenceTrackFrameRate>"); ToReturn+=MI.Get(Stream_Video, StreamPos, Video_FrameRate); if (!MI.Get(Stream_Video, StreamPos, Video_FrameRate_Mode).empty()) ToReturn+=__T(' ')+MI.Get(Stream_Video, StreamPos, Video_FrameRate_Mode); ToReturn+=__T("</essenceTrackFrameRate>\n"); } //essenceTrackSamplingRate if (StreamKind==Stream_Audio && !MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate).empty()) ToReturn+=__T("\t\t\t<essenceTrackSamplingRate>")+MI.Get(Stream_Audio, StreamPos, Audio_SamplingRate)+__T("</essenceTrackSamplingRate>\n"); //essenceTrackBitDepth if (!MI.Get(StreamKind, StreamPos, __T("BitDepth")).empty()) ToReturn+=__T("\t\t\t<essenceTrackBitDepth version=\"PBCoreXSD_Ver_1.2_D1\">")+MI.Get(StreamKind, StreamPos, __T("BitDepth"))+__T("</essenceTrackBitDepth>\n"); //essenceTrackFrameSize if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_Width).empty()) ToReturn+=__T("\t\t\t<essenceTrackFrameSize>")+MI.Get(Stream_Video, StreamPos, Video_Width)+__T('x')+MI.Get(Stream_Video, StreamPos, Video_Height)+__T("</essenceTrackFrameSize>\n"); //essenceTrackAspectRatio if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio).empty()) ToReturn+=__T("\t\t\t<essenceTrackAspectRatio>")+MI.Get(Stream_Video, StreamPos, Video_DisplayAspectRatio)+__T("</essenceTrackAspectRatio>\n"); //essenceTrackDuration if (!MI.Get(StreamKind, StreamPos, __T("Duration")).empty()) ToReturn+=__T("\t\t\t<essenceTrackDuration>")+MI.Get(StreamKind, StreamPos, __T("Duration"))+__T("</essenceTrackDuration>\n"); //essenceTrackLanguage if (!MI.Get(StreamKind, StreamPos, __T("Language")).empty()) ToReturn+=__T("\t\t\t<essenceTrackLanguage>")+MediaInfoLib::Config.Iso639_2_Get(MI.Get(StreamKind, StreamPos, __T("Language")))+__T("</essenceTrackLanguage>\n"); //essenceTrackAnnotation - all fields (except *_String*) separated by | Ztring Temp; for (size_t Pos=0; Pos<MI.Count_Get(StreamKind, StreamPos); Pos++) if (MI.Get(StreamKind, StreamPos, Pos, Info_Name).find(__T("String"))==std::string::npos && !MI.Get(StreamKind, StreamPos, Pos).empty()) Temp+=MI.Get(StreamKind, StreamPos, Pos, Info_Name)+__T(": ")+MI.Get(StreamKind, StreamPos, Pos)+__T('|'); if (!Temp.empty()) { Temp.resize(Temp.size()-1); ToReturn+=__T("\t\t\t<essenceTrackAnnotation>"); ToReturn+=Temp; ToReturn+=__T("</essenceTrackAnnotation>\n"); } ToReturn+=__T("\t\t</pbcoreEssenceTrack>\n"); }
//--------------------------------------------------------------------------- void PBCore_Transform(Node *Parent, MediaInfo_Internal &MI, stream_t StreamKind, size_t StreamPos) { //Menu: only if TimeCode if (StreamKind==Stream_Menu && MI.Get(Stream_Menu, StreamPos, Menu_Format)!=__T("TimeCode")) return; //essenceTrackType Ztring essenceTrackType; switch (StreamKind) { case Stream_Video: essenceTrackType=__T("Video"); break; case Stream_Audio: essenceTrackType=__T("Audio"); break; case Stream_Text: { Ztring Format=MI.Get(Stream_Text, StreamPos, Text_Format); if (Format==__T("EIA-608") || Format==__T("EIA-708")) essenceTrackType=__T("CC"); else essenceTrackType=__T("Text"); } break; case Stream_Menu: if (MI.Get(Stream_Menu, StreamPos, Menu_Format)==__T("TimeCode")) { essenceTrackType=__T("TimeCode"); break; } else return; //Not supported default: return; //Not supported } Node* Node_EssenceTrack=Parent->Add_Child("pbcoreEssenceTrack"); Node_EssenceTrack->Add_Child("essenceTrackType", essenceTrackType); //essenceTrackIdentifier if (!MI.Get(StreamKind, StreamPos, __T("ID")).empty()) { Node_EssenceTrack->Add_Child("essenceTrackIdentifier", MI.Get(StreamKind, StreamPos, __T("ID"))); Node_EssenceTrack->Add_Child("essenceTrackIdentifierSource", "ID (Mediainfo)"); } else if (!MI.Get(StreamKind, StreamPos, __T("UniqueID")).empty()) { Node_EssenceTrack->Add_Child("essenceTrackIdentifier", MI.Get(StreamKind, StreamPos, __T("UniqueID"))); Node_EssenceTrack->Add_Child("essenceTrackIdentifierSource", "UniqueID (Mediainfo)"); } else if (!MI.Get(StreamKind, StreamPos, __T("StreamKindID")).empty()) { Node_EssenceTrack->Add_Child("essenceTrackIdentifier", MI.Get(StreamKind, StreamPos, __T("StreamKindID"))); Node_EssenceTrack->Add_Child("essenceTrackIdentifierSource", "StreamKindID (Mediainfo)"); } //essenceTrackStandard if (StreamKind==Stream_Video) Node_EssenceTrack->Add_Child_IfNotEmpty(MI, Stream_Video, StreamPos, Video_Standard, "essenceTrackStandard"); //essenceTrackEncoding if (!MI.Get(StreamKind, StreamPos, __T("Format")).empty()) { Ztring Format=MI.Get(StreamKind, StreamPos, __T("Format")); if (!MI.Get(StreamKind, StreamPos, __T("Format_Profile")).empty()) Format+=__T(' ')+MI.Get(StreamKind, StreamPos, __T("Format_Profile")); if (!MI.Get(StreamKind, StreamPos, __T("CodecID")).empty()) Format+=__T(" (")+MI.Get(StreamKind, StreamPos, __T("CodecID"))+__T(')'); Node_EssenceTrack->Add_Child("essenceTrackEncoding", Format); } //essenceTrackDataRate if (!MI.Get(StreamKind, StreamPos, __T("BitRate")).empty()) { Ztring BitRate=MI.Get(StreamKind, StreamPos, __T("BitRate")); if (!MI.Get(StreamKind, StreamPos, __T("BitRate_Mode")).empty()) BitRate+=__T(' ')+MI.Get(StreamKind, StreamPos, __T("BitRate_Mode")); Node_EssenceTrack->Add_Child("essenceTrackDataRate", BitRate); } //essenceTrackFrameRate if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_FrameRate).empty()) { Ztring FrameRate=MI.Get(Stream_Video, StreamPos, Video_FrameRate); if (!MI.Get(Stream_Video, StreamPos, Video_FrameRate_Mode).empty()) FrameRate+=__T(' ')+MI.Get(Stream_Video, StreamPos, Video_FrameRate_Mode); Node_EssenceTrack->Add_Child("essenceTrackFrameRate", FrameRate); } //essenceTrackSamplingRate if (StreamKind==Stream_Audio) Node_EssenceTrack->Add_Child_IfNotEmpty(MI, Stream_Audio, StreamPos, Audio_SamplingRate, "essenceTrackSamplingRate"); //essenceTrackBitDepth Node_EssenceTrack->Add_Child_IfNotEmpty(MI, StreamKind, StreamPos, "BitDepth", "essenceTrackBitDepth", "version", std::string("PBCoreXSD_Ver_1.2_D1")); //essenceTrackFrameSize if (StreamKind==Stream_Video && !MI.Get(Stream_Video, StreamPos, Video_Width).empty()) Node_EssenceTrack->Add_Child("essenceTrackFrameSize", MI.Get(Stream_Video, StreamPos, Video_Width)+__T('x')+MI.Get(Stream_Video, StreamPos, Video_Height)); //essenceTrackAspectRatio if (StreamKind==Stream_Video) Node_EssenceTrack->Add_Child_IfNotEmpty(MI, Stream_Video, StreamPos, Video_DisplayAspectRatio, "essenceTrackAspectRatio"); //essenceTrackDuration Node_EssenceTrack->Add_Child_IfNotEmpty(MI, StreamKind, StreamPos, "Duration", "essenceTrackDuration"); //essenceTrackLanguage if (!MI.Get(StreamKind, StreamPos, __T("Language")).empty()) Node_EssenceTrack->Add_Child("essenceTrackLanguage", MediaInfoLib::Config.Iso639_2_Get(MI.Get(StreamKind, StreamPos, __T("Language")))); //essenceTrackAnnotation - all fields (except *_String*) separated by | Ztring Temp; for (size_t Pos=0; Pos<MI.Count_Get(StreamKind, StreamPos); Pos++) if (MI.Get(StreamKind, StreamPos, Pos, Info_Name).find(__T("String"))==std::string::npos && !MI.Get(StreamKind, StreamPos, Pos).empty()) Temp+=MI.Get(StreamKind, StreamPos, Pos, Info_Name)+__T(": ")+MI.Get(StreamKind, StreamPos, Pos)+__T('|'); if (!Temp.empty()) { Temp.resize(Temp.size()-1); Node_EssenceTrack->Add_Child("essenceTrackAnnotation", Temp); } }
//--------------------------------------------------------------------------- void GUI_Main_Core_Table::contextMenuEvent (QContextMenuEvent* Event) { //Retrieving data QTableWidgetItem* Item=itemAt(Event->pos()); if (Item==NULL) return; string FileName=FileName_Before+item(Item->row(), 0)->text().toLocal8Bit().data(); string Field=horizontalHeaderItem(Item->column())->text().toLocal8Bit().data(); ZtringList History; History.Write(C->History(FileName, Field)); Ztring Date; if (Field=="OriginationDate" || Field=="OriginationTime" || Field=="ICRD") { Date=C->FileDate_Get(FileName); if (Date.size()>=10+1+8) { if (Date.size()>=10+1+8) Date.resize(10+1+8); if (Field=="ICRD") Date.insert(0, "&Set ICRD to file creation timestamp ("); //If you change this, change at the end of method too else Date.insert(0, "&Set originationDate and Time to file creation timestamp ("); //If you change this, change at the end of method too Date.append(")"); } else Date.clear(); } //Creating menu QMenu menu(this); //Handling AllFiles display { menu.addAction(new QAction("Fill all open files with this field value", this)); //If you change this, change the test text too menu.addSeparator(); } //Handling Clear display if (!item(Item->row(), Item->column())->text().isEmpty() && C->IsValid(FileName, Field, string())) { menu.addAction(new QAction("Clear this value", this)); //If you change this, change the test text too menu.addSeparator(); } //Handling date display if (!Date.empty()) { menu.addAction(new QAction(QString().fromUtf8(Date.To_Local().c_str()), this)); menu.addSeparator(); } //Handling history display size_t Pos=History.size(); if (!History.empty()) do { Pos--; QString Text=QString().fromUtf8(History[Pos].To_Local().c_str()); if (!Text.isEmpty()) { QAction* Action=new QAction(Text, this); menu.addAction(Action); } } while (Pos>0); //Displaying QAction* Action=menu.exec(Event->globalPos()); if (Action==NULL) return; //Retrieving data QString Text=Action->text(); //Special cases if (Text=="Fill all open files with this field value") //If you change this, change the creation text too { for (int Row=0; Row<rowCount(); Row++) { item(Row, Item->column())->setText(QString().fromUtf8(Ztring(C->Get(FileName, Field)).To_Local().c_str())); dataChanged(indexFromItem(item(Row, Item->column())), indexFromItem(item(Row, Item->column()))); //Special cases if (Field=="UMID" || Field=="LoudnessValue" || Field=="LoudnessRange" || Field=="MaxTruePeakLevel" || Field=="MaxMomentaryLoudness" || Field=="MaxShortTermLoudness") { //Changing BextVersion Enabled value SetText (*Item, "BextVersion"); SetEnabled(*Item, "BextVersion"); } } return; } if (Text=="Clear this value") //If you change this, change the creation text too Text.clear(); //Filling if (Text.contains("&Set ")) //If you change this, change the creation text too { Text=Text.remove("&Set ICRD to file creation timestamp ("); //If you change this, change the creation text too Text=Text.remove("&Set originationDate and Time to file creation timestamp ("); //If you change this, change the creation text too Text=Text.remove(")"); //If you change this, change the creation text too if (horizontalHeaderItem(Item->column())->text()==QString().fromUtf8("ICRD")) { item(Item->row(), Item->column())->setText(Text); dataChanged(indexFromItem(item(Item->row(), Item->column())), indexFromItem(item(Item->row(), Item->column()))); } else { QString Date=Text; Date.remove(10, 1+12); QString Time=Text; Time.remove(0, 10+1); Time.remove(8, 4); int Date_Pos=Item->column()+(horizontalHeaderItem(Item->column())->text()==QString().fromUtf8("OriginationDate")?0:-1); int Time_Pos=Item->column()+(horizontalHeaderItem(Item->column())->text()==QString().fromUtf8("OriginationTime")?0:1); item(Item->row(), Date_Pos)->setText(Date); dataChanged(indexFromItem(item(Item->row(), Date_Pos)), indexFromItem(item(Item->row(), Date_Pos))); item(Item->row(), Time_Pos)->setText(Time); dataChanged(indexFromItem(item(Item->row(), Time_Pos)), indexFromItem(item(Item->row(), Time_Pos))); } } else { item(Item->row(), Item->column())->setText(Text); dataChanged(indexFromItem(item(Item->row(), Item->column())), indexFromItem(item(Item->row(), Item->column()))); } //Menu Main->Menu_Update(); }
Ztring OldFiles_Test () { //Checking version in Info_Version ToShow+=__T("Version checked : "); F.Open(__T("../Source/MediaInfo/MediaInfo_Config.cpp")); I=F.Read(C, 1000000); if (!I) { ToShow+=__T("Error opening ../Source/MediaInfo/MediaInfo_Config.cpp"); return ToShow; } C[I]=0; Z.From_Local(C); Version=Z.SubString(__T("MediaInfoLib - v"), __T("\")")); if (Version.size()!=7) { ToShow+=__T("Error reading ../Source/MediaInfo/MediaInfo.cpp : \"MediaInfoLib - vX.X.X.X - \" not found"); return ToShow; } Version_Short=Version; Version_Short.resize(3); ToShow+=Version+__T("\r\n"); //Checking version in MediaInfo.h if (Test_Version("../Source/MediaInfo/MediaInfo.h", "@version ", "\n")) return ToShow; if (Test_Version("../Source/MediaInfo/MediaInfoList.h", "@version ", "\n")) return ToShow; if (Test_Version("../Project/MSVC/Dll/MediaInfo.rc", " FILEVERSION ", "\n")) return ToShow; if (Test_Version("../Project/MSVC/Dll/MediaInfo.rc", " PRODUCTVERSION ", "\n")) return ToShow; if (Test_Version("../Project/MSVC/Dll/MediaInfo.rc", " VALUE \"FileVersion\", \"", "\"")) return ToShow; if (Test_Version("../Project/MSVC/Dll/MediaInfo.rc", " VALUE \"ProductVersion\", \"", "\"")) return ToShow; if (Test_Version("../History.txt", "Version ", " ")) return ToShow; if (Test_Date(__T("MSVC/Library/MediaInfo.lib"))) return ToShow; if (Test_Date(__T("MSVC/Dll/MediaInfo.dll"))) return ToShow; return ToShow; }