//--------------------------------------------------------------------------- void File_DvbSubtitle::page_composition_segment() { Element_Name("page composition segment"); //Parsing Skip_B1( "page_time_out"); BS_Begin(); Skip_S1(4, "page_version_number"); Skip_S1(2, "page_state"); Skip_S1(2, "reserved"); BS_End(); while(Element_Offset<Element_Size) { Element_Begin1("Region"); int16u region_horizontal_address, region_vertical_address; int8u region_id; Get_B1 (region_id, "region_id"); Skip_B1( "reserved"); Get_B2 (region_horizontal_address, "region_horizontal_address"); Get_B2 (region_vertical_address, "region_vertical_address"); Element_End0(); FILLING_BEGIN(); subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].page_composition_segment=true; subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_horizontal_address=region_horizontal_address; subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id].region_vertical_address=region_vertical_address; FILLING_END(); } }
//--------------------------------------------------------------------------- void File_Flac::FileHeader_Parse() { //Parsing int32u Signature; if (VorbisHeader) { Skip_B1( "Signature"); Skip_Local(4, "Signature"); Skip_B1( "Major version"); Skip_B1( "Minor version"); Skip_B2( "Number of header"); } Get_C4 (Signature, "Signature"); FILLING_BEGIN(); //Integrity if (Signature!=CC4("fLaC")) { Finished(); return; } Stream_Prepare(Stream_General); Fill(Stream_General, 0, General_Format, "FLAC"); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Iso9660::Primary_Volume_Descriptor() { int32u Volume_Space_Size; Element_Begin1("Volume_Descriptor"); Skip_B1("Volume Descriptor Type"); Skip_Local(5,"Standard Identifier"); Skip_B1("Volume Descriptor Version"); Skip_B1("Unused field"); Skip_Local(32,"System Identifier"); Skip_Local(32,"Volume Identifier"); Skip_XX(8,"Unused field"); Get_D4(Volume_Space_Size, "Volume Space Size"); Param_Info2(Volume_Space_Size*(int64u)2048, " bytes"); Skip_XX(32,"Unused field"); Skip_B4("Volume Set Size"); Skip_B4("Volume Sequence Number"); Skip_B4("Logical Block Size"); Skip_B8("Path Table Size"); Skip_B4("Location of Occurrence of Type L Path Table"); Skip_B4("Location of Optional Occurrence of Type L Path Table"); Skip_B4("Location of Occurrence of Type M Path Table"); Skip_B4("Location of Optional Occurrence of Type M Path Table"); Skip_Local(34,"Directory Record for Root Directory"); Skip_Local(128,"Volume Set Identifier"); Skip_Local(128,"Publisher Identifier"); Skip_Local(128,"Data Preparer Identifier"); Skip_Local(128,"Application Identifier"); Skip_Local(37,"Copyright File Identifier"); Skip_Local(37,"Abstract File Identifier"); Skip_Local(37,"Bibliographic File Identifier"); Skip_XX(17,"Volume Creation Date and Time"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Jpeg::SOS() { //Parsing int8u Count; Get_B1 (Count, "Number of image components in scan"); for (int8u Pos=0; Pos<Count; Pos++) { Skip_B1( "Scan component selector"); Skip_B1( "Entropy coding table destination selector"); } Skip_B1( "Start of spectral or predictor selection"); Skip_B1( "End of spectral selection"); Skip_B1( "Successive approximation bit position"); FILLING_BEGIN_PRECISE(); SOS_SOD_Parsed=true; if (Interlaced) Field_Count++; if (!Interlaced && Field_Count%2==0) { Frame_Count++; if (Frame_Count_NotParsedIncluded!=(int64u)-1) Frame_Count_NotParsedIncluded++; } if (Status[IsFilled]) Fill(); if (Config->ParseSpeed<1.0) Finish("JPEG"); //No need of more FILLING_END(); }
//--------------------------------------------------------------------------- void File_Jpeg::SOF_() { //Parsing int16u Height, Width; int8u Resolution, Count; Get_B1 (Resolution, "Resolution"); Get_B2 (Height, "Height"); Get_B2 (Width, "Width"); Get_B1 (Count, "Number of image components in frame"); for (int8u Pos=0; Pos<Count; Pos++) { Skip_B1( "Identifier"); Skip_B1( "sampling factor"); Skip_B1( "Quantization table destination selector"); } FILLING_BEGIN(); Stream_Prepare(Stream_General); Fill(Stream_General, 0, General_Format, "JPEG"); if (Count_Get(StreamKind)==0) Stream_Prepare(StreamKind); Fill(StreamKind, 0, "Format", StreamKind==Stream_Image?"JPEG":"M-JPEG"); Fill(StreamKind, 0, "Codec", StreamKind==Stream_Image?"JPEG":"M-JPEG"); if (StreamKind==Stream_Image) Fill(Stream_Image, 0, Image_Codec_String, "JPEG"); //To Avoid automatic filling Fill(StreamKind, 0, "Resolution", Resolution*3); Fill(StreamKind, 0, "Height", Height*Height_Multiplier); Fill(StreamKind, 0, "Width", Width); FILLING_END(); }
//--------------------------------------------------------------------------- void File_DvbSubtitle::region_composition_segment() { Element_Name("region composition segment"); //Parsing int16u region_width, region_height; int8u region_id, region_depth; Get_B1 ( region_id, "region_id"); BS_Begin(); Skip_S1(4, "region_version_number"); Skip_S1(1, "region_fill_flag"); Skip_S1(3, "reserved"); BS_End(); Get_B2 ( region_width, "region_width"); Get_B2 ( region_height, "region_height"); BS_Begin(); Skip_S1(3, "region_level_of_compatibility"); Get_S1 (3, region_depth, "region_depth"); Param_Info2(DvbSubtitle_region_depth[region_depth], " bits"); Skip_S1(2, "reserved"); BS_End(); Skip_B1( "CLUT_id"); Skip_B1( "region_8-bit_pixel_code"); BS_Begin(); Skip_S1(4, "region_4-bit_pixel-code"); Skip_S1(2, "region_2-bit_pixel-code"); Skip_S1(2, "reserved"); BS_End(); while(Element_Offset<Element_Size) { Element_Begin1("Object"); int8u object_type; Skip_B2( "object_id"); BS_Begin(); Get_S1 ( 2, object_type, "object_type"); Skip_S1( 2, "object_provider_flag"); Skip_S1(12, "object_horizontal_position"); Skip_S1( 4, "reserved"); Skip_S1(12, "object_vertical_position"); BS_End(); switch (object_type) { case 0x01 : case 0x02 : Skip_B2( "foreground_pixel_code"); Skip_B2( "background_pixel_code"); break; default : ; } Element_End0(); } FILLING_BEGIN(); region_data& region = subtitle_streams[subtitle_stream_id].pages[page_id].regions[region_id]; region.region_composition_segment=true; region.region_width=region_width; region.region_height=region_height; region.region_depth=region_depth; FILLING_END(); }
//--------------------------------------------------------------------------- void File_Cdp::cdp_footer() { Element_Begin1("cdp_footer"); Skip_B1( "cdp_footer_id"); Skip_B2( "cdp_ftr_sequence_cntr"); Skip_B1( "packet_checksum"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Jpeg::APP0_JFFF() { Skip_B1( "Zero"); Element_Begin1("Extension"); Skip_B1( "extension_code"); //0x10 Thumbnail coded using JPEG, 0x11 Thumbnail stored using 1 byte/pixel, 0x13 Thumbnail stored using 3 bytes/pixel if (Element_Size>Element_Offset) Skip_XX(Element_Size-Element_Offset, "extension_data"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Jpeg::COD() { //Parsing int16u Levels; int8u Style, Style2, MultipleComponentTransform; bool PrecinctUsed; Get_B1 (Style, "Scod - Style"); Get_Flags (Style, 0, PrecinctUsed, "Precinct used"); Skip_Flags(Style, 1, "Use SOP (start of packet)"); Skip_Flags(Style, 2, "Use EPH (end of packet header)"); Skip_B1( "Number of decomposition levels"); Skip_B1( "Progression order"); Get_B2 (Levels, "Number of layers"); Info_B1(DimX, "Code-blocks dimensions X (2^(n+2))"); Param_Info2(1<<(DimX+2), " pixels"); Info_B1(DimY, "Code-blocks dimensions Y (2^(n+2))"); Param_Info2(1<<(DimY+2), " pixels"); Get_B1 (Style2, "Style of the code-block coding passes"); Skip_Flags(Style, 0, "Selective arithmetic coding bypass"); Skip_Flags(Style, 1, "MQ states for all contexts"); Skip_Flags(Style, 2, "Regular termination"); Skip_Flags(Style, 3, "Vertically stripe-causal context formation"); Skip_Flags(Style, 4, "Error resilience info is embedded on MQ termination"); Skip_Flags(Style, 5, "Segmentation marker is to be inserted at the end of each normalization coding pass"); Skip_B1( "Transform"); Get_B1(MultipleComponentTransform, "Multiple component transform"); if (PrecinctUsed) { BS_Begin(); Skip_S1(4, "LL sub-band width"); Skip_S1(4, "LL sub-band height"); BS_End(); for (int16u Pos=0; Pos<Levels; Pos++) { Element_Begin1("Decomposition level"); BS_Begin(); Skip_S1(4, "decomposition level width"); Skip_S1(4, "decomposition level height"); BS_End(); Element_End0(); } } FILLING_BEGIN(); if (Frame_Count==0 && Field_Count==0) { switch (MultipleComponentTransform) { case 0x01 : Fill(StreamKind_Last, 0, "Compression_Mode", "Lossless"); break; case 0x02 : Fill(StreamKind_Last, 0, "Compression_Mode", "Lossy"); break; default : ; } } FILLING_END(); }
//--------------------------------------------------------------------------- void File_Flac::FileHeader_Parse() { //Parsing if (VorbisHeader) { Skip_B1( "Signature"); Skip_Local(4, "Signature"); Skip_B1( "Major version"); Skip_B1( "Minor version"); Skip_B2( "Number of header"); } Skip_C4( "Signature"); }
//--------------------------------------------------------------------------- void File_Dpx::IndustrySpecificHeader_Dpx() { Element_Name("Industry specific header"); //Parsing float32 FrameRate; Element_Begin1("Motion-picture film information"); Skip_String(2, "Film mfg. ID code"); Skip_String(2, "Film type"); Skip_String(2, "Offset in perfs"); Skip_String(6, "Prefix"); Skip_String(4, "Count"); Skip_String(32, "Format - e.g. Academy"); Skip_B4( "Frame position in sequence"); Skip_B4( "Sequence length (frames)"); Skip_B4( "Held count (1 = default)"); Get_BF4 (FrameRate, "Frame rate of original (frames/s)"); Skip_BF4( "Shutter angle of camera in degrees"); Skip_UTF8(32, "Frame identification - e.g. keyframe"); Skip_UTF8(100, "Slate information"); Skip_XX(56, "Reserved for future use"); Element_End0(); Element_Begin1("Television information"); Skip_B4( "SMPTE time code"); Skip_B4( "SMPTE user bits"); Info_B1(Interlace, "Interlace");Param_Info1((Interlace==0?"noninterlaced":"2:1 interlace")); Skip_B1( "Field number"); Info_B1(VideoSignalStandard, "Video signal standard");Param_Info1(DPX_VideoSignalStandard(VideoSignalStandard)); Skip_B1( "Zero"); Skip_BF4( "Horizontal sampling rate (Hz)"); Skip_BF4( "Vertical sampling rate (Hz)"); Skip_BF4( "Temporal sampling rate or frame rate (Hz)"); Skip_BF4( "Time offset from sync to first pixel (ms)"); Skip_BF4( "Gamma"); Skip_BF4( "Black level code value"); Skip_BF4( "Black gain"); Skip_BF4( "Breakpoint"); Skip_BF4( "Reference white level code value"); Skip_BF4( "Integration time (s)"); Skip_XX(76, "Reserved for future use"); Element_End0(); FILLING_BEGIN(); if (FrameRate) Fill(StreamKind_Last, StreamPos_Last, "FrameRate", FrameRate); FILLING_END(); }
//--------------------------------------------------------------------------- void File_AfdBarData::Read_Buffer_Continue() { //Default line_number_end_of_top_bar=(int16u)-1; line_number_start_of_bottom_bar=(int16u)-1; pixel_number_end_of_left_bar=(int16u)-1; pixel_number_start_of_right_bar=(int16u)-1; active_format=(int8u)-1; aspect_ratio=(int8u)-1; //Parsing switch (Format) { case Format_A53_4_DTG1 : afd_data(); break; case Format_A53_4_GA94_06 : bar_data(); break; case Format_S2016_3 : afd_data(); Skip_B1( "Reserved"); Skip_B1( "Reserved"); bar_data(); break; default : Skip_XX(Element_Size, "Unknown"); return; } FILLING_BEGIN(); //Filling Stream.line_number_end_of_top_bar=line_number_end_of_top_bar; Stream.line_number_start_of_bottom_bar=line_number_start_of_bottom_bar; Stream.pixel_number_end_of_left_bar=pixel_number_end_of_left_bar; Stream.pixel_number_start_of_right_bar=pixel_number_start_of_right_bar; Stream.active_format=active_format; Stream.aspect_ratio=aspect_ratio; if (!Status[IsAccepted]) { Accept("AfdBarData"); Fill("AfdBarData"); } if (MediaInfoLib::Config.ParseSpeed_Get()<1) Finish("AfdBarData"); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Sdp::Data_Parse() { Element_Name("Packet"); for (int8u Pos=0; Pos<5; Pos++) { if (FieldLines[Pos]) { Element_Code=FieldLines[Pos]; stream &Stream=Streams[FieldLines[Pos]]; if (Stream.Parser==NULL) { Stream.Parser=new File_Teletext(); Stream.Parser->IsSubtitle=true; Open_Buffer_Init(Stream.Parser); } if (Stream.Parser->PTS_DTS_Needed) Stream.Parser->FrameInfo=FrameInfo; Demux(Buffer+Buffer_Offset+Element_Offset, 45, ContentType_MainStream); Open_Buffer_Continue(Stream.Parser, Buffer+Buffer_Offset+Element_Offset, 45); Element_Offset+=45; } } Element_Begin1("SDP Footer"); Skip_B1( "Footer ID"); Skip_B2( "Footer Sequence number"); Skip_B2( "SDP Cheksum"); Skip_B2( "SMPTE 291 Cheksum"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Amr::FileHeader_Parse() { //From a container if (!Codec.empty()) { Accept("AMR"); Finish("AMR"); return; } //Parsing int64u Signature; Skip_C5( "Signature (Common)"); Peek_B8(Signature); if ((Signature&0xFF00000000000000LL)==0x0A00000000000000LL) //\n { IsWB=false; Channels=1; } else if ((Signature&0xFFFFFFFFFFFFFF00LL)==0x5F4D43312E300A00LL) //_MC1.0\n { IsWB=false; Channels=2; //Or more, see later } else if ((Signature&0xFFFFFF0000000000LL)==0x2D57420000000000LL) //-WB { Skip_C3( "Signature (WB)"); IsWB=true; Peek_B8(Signature); if ((Signature&0xFF00000000000000LL)==0x0A00000000000000LL) //\n { Channels=1; } else if ((Signature&0xFFFFFFFFFFFFFF00LL)==0x5F4D43312E300A00LL) //_MC1.0\n { Channels=2; //Or more, see later } } else Channels=0; Skip_B1( "Signature (Carriage return)"); /* if (Channels==2) //Mutli-channels { BS_Begin(); Skip_S4(28, "Reserved"); Get_S1 ( 4, Channels, "Channels"); } */ Header_Size=(int8u)Element_Offset; FILLING_BEGIN(); Accept("AMR"); if (Channels!=1 || IsWB) Finish("AMR"); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Vc3::ImageGeometry() { //Parsing Element_Begin("Image Geometry", 11); Get_B2 (ALPF, "Active lines-per-frame"); Get_B2 (SPL, "Samples-per-line"); Skip_B1( "Zero"); Skip_B2( "Number of active lines"); Skip_B2( "Zero"); BS_Begin(); Get_S1 (3, SBD, "Sample bit depth"); Mark_1(); Mark_1(); Mark_0(); Mark_0(); Mark_0(); Mark_1(); Mark_0(); Mark_0(); Mark_0(); Mark_1(); Get_SB ( SST, "Source scan type"); Mark_0(); Mark_0(); BS_End(); Element_End(); }
//--------------------------------------------------------------------------- void File_Cdp::Read_Buffer_Continue() { if (Buffer_Size==0) return; if (WithAppleHeader) { int32u Size, Magic; Get_B4 (Size, "Size"); Get_B4 (Magic, "Magic"); FILLING_BEGIN(); if (Magic!=0x63636470) { Reject("CDP"); return; } FILLING_END(); } //CRC int8u CRC=0; for (size_t Pos=WithAppleHeader?8:0; Pos<Buffer_Size; Pos++) CRC+=Buffer[Pos]; if (CRC) { Skip_XX(Element_Size-Element_Offset, "Invalid data (CRC fails)"); return; } cdp_header(); while(Element_Offset<Element_Size) { int8u section_id; Peek_L1(section_id); switch (section_id) { case 0x71 : time_code_section(); break; case 0x72 : ccdata_section(); break; case 0x73 : ccsvcinfo_section(); break; case 0x74 : cdp_footer(); break; case 0xFF : Skip_B1("Padding?"); break; default : if (section_id>=0x75 && section_id<=0xEF) future_section(); else Skip_XX(Element_Size-Element_Offset, "Unknown"); } } }
//--------------------------------------------------------------------------- void File_Jpeg::APP0_AVI1() { //Parsing int8u FieldOrder=(int8u)-1; Element_Begin1("AVI1"); if (Element_Size==16-4) { Get_B1 (FieldOrder, "Field Order"); Skip_XX(7, "Zeroes"); } if (Element_Size==18-4) { Get_B1 (FieldOrder, "Field Order"); Skip_B1( "Zero"); Skip_B4( "Size of 1st Field"); Skip_B4( "Size of 2nd Field"); } Element_End0(); FILLING_BEGIN(); if (Frame_Count==0 && Field_Count==0) { switch (FieldOrder) { case 0x00 : Fill(Stream_Video, 0, Video_Interlacement, "PPF"); Fill(Stream_Video, 0, Video_ScanType, "Progressive"); break; case 0x01 : Fill(Stream_Video, 0, Video_Interlacement, "TFF"); Fill(Stream_Video, 0, Video_ScanType, "Interlaced"); Fill(Stream_Video, 0, Video_ScanOrder, "TFF"); Height_Multiplier=2; break; case 0x02 : Fill(Stream_Video, 0, Video_Interlacement, "BFF"); Fill(Stream_Video, 0, Video_ScanType, "Interlaced"); Fill(Stream_Video, 0, Video_ScanOrder, "BFF"); Height_Multiplier=2; break; default : ; } } FILLING_END(); }
//--------------------------------------------------------------------------- void File_Cdp::cdp_header() { Element_Begin1("cdp_header"); int16u cdp_identifier; int8u cdp_frame_rate; Get_B2 ( cdp_identifier, "cdp_identifier"); Skip_B1( "cdp_length"); BS_Begin(); Get_S1 (4, cdp_frame_rate, "cdp_frame_rate"); Param_Info1(Ztring::ToZtring(Cdp_cdp_frame_rate(cdp_frame_rate))+__T(" fps")); Skip_S1(4, "Reserved"); Skip_SB( "time_code_present"); Skip_SB( "ccdata_present"); Skip_SB( "svcinfo_present"); Skip_SB( "svc_info_start"); Skip_SB( "svc_info_change"); Skip_SB( "svc_info_complete"); Skip_SB( "caption_service_active"); Skip_SB( "Reserved"); BS_End(); Skip_B2( "cdp_hdr_sequence_cntr"); Element_End0(); FILLING_BEGIN(); if (!Status[IsAccepted]) { if (cdp_identifier!=0x9669) { Reject("CDP"); return; } Accept("CDP"); } FILLING_END(); }
//--------------------------------------------------------------------------- void File_Jpeg::SOS() { //Parsing int8u Count; Get_B1 (Count, "Number of image components in scan"); for (int8u Pos=0; Pos<Count; Pos++) { Skip_B1( "Scan component selector"); Skip_B1( "Entropy coding table destination selector"); } Skip_B1( "Start of spectral or predictor selection"); Skip_B1( "End of spectral selection"); Skip_B1( "Successive approximation bit position"); //Filling Finished(); //No need of more }
//--------------------------------------------------------------------------- void File_Module::FileHeader_Parse() { //Parsing Ztring ModuleName, SamplesName; int32u Signature; Get_Local(20, ModuleName, "Module name"); for (int8u Pos=0; Pos<31; Pos++) { Element_Begin(); Get_Local(22, SamplesName, "Sample's name"); Element_Name(SamplesName); Skip_B2( "Sample length"); Skip_B1( "Finetune value for the sample"); Skip_B1( "Volume of the sample"); Skip_B2( "Start of sample repeat offset"); Skip_B2( "Length of sample repeat"); Element_End(); } Skip_B1( "Number of song positions"); Skip_B1( "0x8F"); Skip_XX(128, "Pattern table"); Get_C4 (Signature, "Signature"); FILLING_BEGIN(); switch (Signature) { case 0x4D2E4B2E : //M.K. case 0x4D214B21 : //M!K! case 0x664C5434 : //FLT4 case 0x664C5438 : //FLT8 case 0x3663684E : //6CHN case 0x3863684E : //8CHN break; default : Finished(); return; } FILLING_END() FILLING_BEGIN(); Stream_Prepare(Stream_General); Fill(Stream_General, 0, General_Format, "Module"); Stream_Prepare(Stream_Audio); Finished(); FILLING_END(); }
//--------------------------------------------------------------------------- void File_MpcSv8::RG() { //Parsing int16u TitleGain, AlbumGain; Skip_B1( "Version"); Get_L2 (TitleGain, "Title gain"); Param_Info(((float32)((int16s)TitleGain))/1000, 2, " dB"); Skip_L2( "Title peak"); Get_L2 (AlbumGain, "Album gain"); Param_Info(((float32)((int16s)TitleGain))/1000, 2, " dB"); Skip_L2( "Album peak"); }
//--------------------------------------------------------------------------- void File_Cdp::future_section() { //Parsing int8u length; Element_Begin1("future_section"); Skip_B1( "future_section_id"); Get_B1 (length, "length"); Skip_XX(length, "Unknown"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Dpx::IndustrySpecificHeader_Cineon() { Element_Name("Motion picture industry specific header"); //Parsing Element_Begin1("Motion-picture film information"); Skip_B1( "?"); Skip_B1( "?"); Skip_B1( "?"); Skip_B1( "?"); Skip_B4( "?"); Skip_B4( "?"); Skip_UTF8(32, "?"); Skip_B4( "?"); Skip_B4( "?"); Skip_UTF8(32, "?"); Skip_UTF8(200, "?"); Skip_XX(740, "Reserved for future use"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Tar::Read_Buffer_Continue() { if (File_Size<257) { Reject(); return; } if (Buffer_Size<257) return; //Wait for more data //Parsing Ztring ChecksumO; Skip_Local(100, "File name"); Skip_Local( 8, "File mode"); Skip_Local( 8, "Owner's numeric user ID"); Skip_Local( 12, "Group's numeric user ID"); Skip_Local( 12, "File size in bytes"); Skip_Local( 8, "Last modification time in numeric Unix time format"); Get_Local ( 8, ChecksumO, "Checksum for header block"); Skip_B1( "Link indicator (file type)"); Skip_Local(100, "Name of linked file"); Skip_XX(File_Size-257, "Data"); FILLING_BEGIN(); //Handling Checksum int32u Checksum=ChecksumO.To_int32u(8); int32u ChecksumU=0; int32u ChecksumS=0; for (size_t Pos=0; Pos<257; Pos++) { if (Pos==148) { ChecksumU+=32*8; //8 spaces ChecksumS+=32*8; //8 spaces Pos+=7; //Skiping Checksum } ChecksumU+=(int8u)Buffer[Pos]; ChecksumS+=(int8s)Buffer[Pos]; } if (ChecksumU!=Checksum && ChecksumS!=Checksum) { Reject("Tar"); return; } //Filling Accept("Tar"); Fill(Stream_General, 0, General_Format, "Tar"); Reject("Tar"); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Png::IHDR() { //Parsing int32u Width, Height; int8u Bit_depth, Colour_type, Compression_method, Interlace_method; Get_B4 (Width, "Width"); Get_B4 (Height, "Height"); Get_B1 (Bit_depth, "Bit depth"); Get_B1 (Colour_type, "Colour type"); Param_Info1(Png_Colour_type(Colour_type)); Get_B1 (Compression_method, "Compression method"); Skip_B1( "Filter method"); Get_B1 (Interlace_method, "Interlace method"); FILLING_BEGIN_PRECISE(); if (!Status[IsFilled]) { Fill(StreamKind_Last, 0, "Width", Width); Fill(StreamKind_Last, 0, "Height", Height); int8u Resolution; switch (Colour_type) { case 0 : Resolution=Bit_depth; break; case 2 : Resolution=Bit_depth*3; break; case 3 : Resolution=Bit_depth; break; case 4 : Resolution=Bit_depth*2; break; case 6 : Resolution=Bit_depth*4; break; default: Resolution=0; } if (Resolution) Fill(StreamKind_Last, 0, "BitDepth", Resolution); switch (Compression_method) { case 0 : Fill(StreamKind_Last, 0, "Format_Compression", "LZ77"); break; default: ; } switch (Interlace_method) { case 0 : break; case 1 : break; default: ; } Fill(); } if (Config->ParseSpeed<1.0) Finish("PNG"); //No need of more FILLING_END(); }
//--------------------------------------------------------------------------- void File_Cdp::ccsvcinfo_section() { //Parsing int8u svc_count; Element_Begin1("ccsvcinfo_section"); Skip_B1( "ccsvcinfo_id"); BS_Begin(); Skip_SB( "reserved"); Skip_SB( "svc_info_start"); Skip_SB( "svc_info_change"); Skip_SB( "svc_info_complete"); Get_S1 (4, svc_count, "svc_count"); BS_End(); for (int8u Pos=0; Pos<svc_count; Pos++) { Element_Begin1("svc"); bool csn_size; BS_Begin(); Skip_SB( "reserved"); Get_SB ( csn_size, "csn_size"); if (csn_size) { Skip_SB( "reserved"); Skip_S1(5, "caption_service_number"); } else Skip_S1(6, "caption_service_number"); BS_End(); //svc_data_byte - caption_service_descriptor Element_Begin1("service"); Ztring language; bool digital_cc; Get_Local(3, language, "language"); BS_Begin(); Get_SB (digital_cc, "digital_cc"); Skip_SB( "reserved"); if (digital_cc) //line21 { Skip_S1(5, "reserved"); Skip_SB( "line21_field"); } else Skip_S1(6, "caption_service_number"); Skip_SB( "easy_reader"); Skip_SB( "wide_aspect_ratio"); Skip_S2(14, "reserved"); BS_End(); Element_End0(); Element_End0(); } Element_End0(); }
//--------------------------------------------------------------------------- void File_Caf::info() { if (Element_Size<4) return; //Parsing int32u NumEntries; Get_B4 (NumEntries, "NumEntries"); ZtringList List; std::map<Ztring, Ztring> ListList; const int8u* Buffer_Max = Buffer+(size_t)(Buffer_Offset+Element_Size); while (Element_Offset<Element_Size) { const int8u* Buffer_Begin = Buffer+(size_t)(Buffer_Offset+Element_Offset); const int8u* Buffer_Middle = Buffer_Begin; while (Buffer_Middle<Buffer_Max && *Buffer_Middle) ++Buffer_Middle; const int8u* Buffer_End = Buffer_Middle + 1; while (Buffer_End<Buffer_Max && *Buffer_End) ++Buffer_End; Ztring Key, Value; Get_UTF8(Buffer_Middle-Buffer_Begin, Key, "Key"); Skip_B1 ( "Zero"); Get_UTF8(Buffer_End-(Buffer_Middle+1), Value, "Value"); if (Buffer_End!=Buffer_Max) Skip_B1 ( "Zero"); ListList[Key]=Value; } if (ListList.size()!=NumEntries) return; for (std::map<Ztring, Ztring>::iterator Item=ListList.begin(); Item!=ListList.end(); ++Item) Fill(Stream_General, 0, Item->first.To_UTF8().c_str(), Item->second); }
//--------------------------------------------------------------------------- void File_Dpx::GenericSectionHeader_Cineon_ImageElement() { Element_Begin1("image element"); int32u Width, Height; Skip_B1( "Designator - Byte 0"); Skip_B1( "Designator - Byte 1"); Skip_B1( "Bits per pixel"); Skip_B1( "Unused"); Get_X4 (Width, "Pixels per line"); Get_X4 (Height, "Lines per image element"); Skip_BF4( "Minimum data value"); Skip_BF4( "Minimum quantity represented"); Skip_BF4( "Maximum data value"); Skip_BF4( "Maximum quantity represented"); Element_End0(); FILLING_BEGIN(); if (Frame_Count==0) { Fill(StreamKind_Last, StreamPos_Last, "Width", Width); Fill(StreamKind_Last, StreamPos_Last, "Height", Height); } FILLING_END(); }
//--------------------------------------------------------------------------- void File_Png::IHDR() { //Parsing int32u Width, Height; int8u Bit_depth, Colour_type, Compression_method, Interlace_method; Get_B4 (Width, "Width"); Get_B4 (Height, "Height"); Get_B1 (Bit_depth, "Bit depth"); Get_B1 (Colour_type, "Colour type"); Param_Info(Png_Colour_type(Colour_type)); Get_B1 (Compression_method, "Compression method"); Skip_B1( "Filter method"); Get_B1 (Interlace_method, "Interlace method"); FILLING_BEGIN_PRECISE(); Fill(Stream_Image, 0, Image_Width, Width); Fill(Stream_Image, 0, Image_Height, Height); int8u Resolution; switch (Colour_type) { case 0 : Resolution=Bit_depth; break; case 2 : Resolution=Bit_depth*3; break; case 3 : Resolution=Bit_depth; break; case 4 : Resolution=Bit_depth*2; break; case 6 : Resolution=Bit_depth*4; break; default: Resolution=0; } if (Resolution) Fill(Stream_Image, 0, Image_BitDepth, Resolution); switch (Compression_method) { case 0 : Fill(Stream_Image, 0, Image_Format, "LZ77"); Fill(Stream_Image, 0, Image_Codec, "LZ77 variant"); break; default: ; } switch (Interlace_method) { case 0 : break; case 1 : break; default: ; } Finish("PNG"); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Jpeg::APP0_JFIF() { //Parsing Skip_B1( "Zero"); Element_Begin1("JFIF"); int16u Width, Height; int8u Unit, ThumbailX, ThumbailY; Skip_B2( "Version"); Get_B1 (Unit, "Unit"); //0=Pixels, 1=dpi, 2=dpcm Get_B2 (Width, "Xdensity"); Get_B2 (Height, "Ydensity"); Get_B1 (ThumbailX, "Xthumbail"); Get_B1 (ThumbailY, "Ythumbail"); Skip_XX(3*ThumbailX*ThumbailY, "RGB Thumbail"); Element_End0(); }