//--------------------------------------------------------------------------- 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(); }
bool File_Zip::Zip64_end_of_central_directory_record() { if (Element_Offset+12>Element_Size) //Zip64_end_of_central_directory_record return false; //Not enough data //Retrieving complete Zip64_end_of_central_directory_record size int64u size_of_Zip64_end_of_central_directory_record=LittleEndian2int64u(Buffer+(size_t)Element_Offset+4); if (Element_Offset+12+size_of_Zip64_end_of_central_directory_record>Element_Size) //end_of_central_directory all included return false; //Not enough data //Parsing //~ int32u offset; int16u version_made_by; Element_Begin1("Zip64 End of central directory record"); Skip_C4( "Zip64 end of central dir signature"); Skip_L8( "size of zip64 end of central directory record"); Get_L2 (version_made_by, "version made by"); Param_Info1((version_made_by>>8)>20?"unused":Zip_made_by[version_made_by>>8]); Skip_L2( "version needed to extract"); Skip_L4( "number of this disk"); Skip_L4( "number of the disk");// with the start of the central directory Skip_L8( "total number of entries on this disk");// in the central directory Skip_L8( "total number of entries");// in the central directory Skip_L8( "size of the central directory"); Skip_L8( "offset of start of central directory"); // with respect to the starting disk number Skip_XX(size_of_Zip64_end_of_central_directory_record-44, "zip64 extensible data sector"); Element_End0(); return true; }
//--------------------------------------------------------------------------- void File_Sdp::Header_Parse() { //Parsing int8u Length, FormatCode; Skip_B2( "Identifier"); Get_B1 (Length, "Length"); Get_B1 (FormatCode, "Format Code"); for (int8u Pos=0; Pos<5; Pos++) { FieldLines[Pos]=0; #if MEDIAINFO_TRACE Element_Begin1("Field/Line"); BS_Begin(); Info_SB( Field, "Field Number"); Info_S1(2, Reserved, "Reserved"); Info_S1(5, Line, "Line Number"); BS_End(); FieldLines[Pos]=((Field?1:0)<<7) |(Reserved<<5) | Line; //Removing field information ((Field?1:0)<<7) | if (FieldLines[Pos]) { Element_Info1(Field?2:1); Element_Info1(Line); } else Element_Info1("None"); Element_End0(); #else //MEDIAINFO_TRACE Get_B1(FieldLines[Pos], "Field/Line"); FieldLines[Pos]&=0x7F; //Removing field information #endif //MEDIAINFO_TRACE } Header_Fill_Size(3+Length); }
bool File_Zip::end_of_central_directory() { if (Element_Offset+22>Element_Size) //end_of_central_directory up to relative offset of .ZIP file comment length included return false; //Not enough data //Retrieving complete local_file_header size int16u zip_comment_length=LittleEndian2int16u(Buffer+(size_t)Element_Offset+20); if (Element_Offset+22+zip_comment_length>Element_Size) //end_of_central_directory all included return false; //Not enough data //Parsing int32u offset; Element_Begin1("End of central directory"); Skip_C4( "end of central dir signature"); Skip_L2( "number of this disk"); Skip_L2( "number of the disk");// with the start of the central directory Skip_L2( "total number of entries on this disk");// in the central directory Skip_L2( "total number of entries");// in the central directory Skip_L4( "size of the central directory"); Get_L4 (offset, "offset of start of central directory");// with respect to the starting disk number Skip_L2( "zip file comment length"); Skip_XX(zip_comment_length, "zip file comment"); Element_End0(); //Going to first central directory (once) if (!end_of_central_directory_IsParsed) { end_of_central_directory_IsParsed=true; GoTo(offset); } return true; }
//--------------------------------------------------------------------------- void File_Aac::ErrorResilientCelpSpecificConfig () { Element_Begin1("ErrorResilientCelpSpecificConfig"); bool isBaseLayer; Get_SB(isBaseLayer, "isBaseLayer"); if (isBaseLayer) { ER_SC_CelpHeader (); } else { bool isBWSLayer; Get_SB(isBWSLayer, "isBWSLayer"); if (isBWSLayer) { //~ CelpBWSenhHeader () //~ { Skip_S1(2, "BWS_configuration"); //~ } } else { Skip_S1(2, "CELP-BRS-id"); } } Element_End0(); }
//--------------------------------------------------------------------------- void File_Vc3::TimeCode() { //Parsing Element_Begin1("Time Code"); bool TCP; BS_Begin(); Get_SB ( TCP, "TCP: Time Code Present"); Mark_0(); Mark_0(); Mark_0(); Mark_0(); Mark_0(); Mark_0(); Mark_0(); BS_End(); if (TCP) { Skip_B8( "Time Code"); } else Skip_B8( "Junk"); Element_End0(); }
//--------------------------------------------------------------------------- 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_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_Tiff::Read_Directory() { /* Each directory consist of 4 fields */ /* Get information for this directory */ Element_Begin0(); ifditem IfdItem; Get_X2 (IfdItem.Tag, "Tag"); Param_Info1(Tiff_Tag_Name(IfdItem.Tag)); Get_X2 (IfdItem.Type, "Type"); Param_Info1(Tiff_Type_Name(IfdItem.Type)); Get_X4 (IfdItem.Count, "Count"); Element_Name(Tiff_Tag_Name(IfdItem.Tag)); if (Tiff_Type_Size(IfdItem.Type)*IfdItem.Count<=4) { GetValueOffsetu(IfdItem); /* Padding up, skip dummy bytes */ if (Tiff_Type_Size(IfdItem.Type)==0) { if (Element_Offset+4<Element_Size) Skip_XX(Element_Size-(Element_Offset+4), "Unknown"); } else if (Tiff_Type_Size(IfdItem.Type)*IfdItem.Count<4) Skip_XX(Tiff_Type_Size(IfdItem.Type)*IfdItem.Count, "Padding"); } else { int32u IFDOffset; Get_X4 (IFDOffset, "IFDOffset"); IfdItems[IFDOffset]=IfdItem; } Element_End0(); }
//--------------------------------------------------------------------------- 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_Vc3::ImageGeometry() { //Parsing Element_Begin1("Image Geometry"); 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"); Param_Info1(Vc3_SST[SST]); Mark_0(); Mark_0(); BS_End(); Element_End0(); }
//--------------------------------------------------------------------------- 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_Dpx::GenericSectionHeader_Dpx_ImageElement() { Element_Begin1("image element"); int8u Descriptor, TransferCharacteristic, ColorimetricSpecification, BitDephs; Info_B4(DataSign, "Data sign");Param_Info1((DataSign==0?"unsigned":"signed")); Skip_B4( "Reference low data code value"); Skip_BF4( "Reference low quantity represented"); Skip_B4( "Reference high data code value"); Skip_BF4( "Reference high quantity represented"); Get_B1 (Descriptor, "Descriptor");Param_Info1(DPX_Descriptors(Descriptor)); Get_B1 (TransferCharacteristic, "Transfer characteristic");Param_Info1(DPX_TransferCharacteristic(TransferCharacteristic)); Get_B1 (ColorimetricSpecification, "Colorimetric specification");Param_Info1(DPX_ColorimetricSpecification(ColorimetricSpecification)); Get_B1 (BitDephs, "Bit depth");Param_Info1(DPX_ValidBitDephs(BitDephs)); Info_B2(ComponentDataPackingMethod, "Packing");Param_Info1((ComponentDataPackingMethod<8?DPX_ComponentDataPackingMethod[ComponentDataPackingMethod]:"invalid")); Info_B2(ComponentDataEncodingMethod, "Encoding");Param_Info1((ComponentDataEncodingMethod<8?DPX_ComponentDataEncodingMethod[ComponentDataEncodingMethod]:"invalid")); Skip_B4( "Offset to data"); Skip_B4( "End-of-line padding"); Skip_B4( "End-of-image padding"); Skip_UTF8(32, "Description of image element"); Element_End0(); FILLING_BEGIN(); if (Frame_Count==0) { Fill(StreamKind_Last, StreamPos_Last, "ColorSpace", DPX_Descriptors_ColorSpace(Descriptor)); Fill(StreamKind_Last, StreamPos_Last, "ChromaSubsampling", DPX_Descriptors_ChromaSubsampling(Descriptor)); Fill(StreamKind_Last, StreamPos_Last, "BitDepth", BitDephs); Fill(StreamKind_Last, StreamPos_Last, "colour_description_present", "Yes"); Fill(StreamKind_Last, StreamPos_Last, "colour_primaries", DPX_TransferCharacteristic(TransferCharacteristic)); Fill(StreamKind_Last, StreamPos_Last, "transfer_characteristics", DPX_ColorimetricSpecification(ColorimetricSpecification)); } FILLING_END(); }
//--------------------------------------------------------------------------- void File_Pdf::startxref() { //We need to find the exact begin Buffer_Offset=Buffer_Size-1; while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n')) Buffer_Offset--; Buffer_Offset-=5; // "%%EOF" while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n')) Buffer_Offset--; while (Buffer_Offset && Buffer[Buffer_Offset]>='0' && Buffer[Buffer_Offset]<='9') // Value Buffer_Offset--; while (Buffer_Offset && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n')) Buffer_Offset--; Buffer_Offset-=8; //Parsing Element_Begin1("Cross-Reference Table Offset"); string xrefOffsetS; Skip_String(SizeOfLine(), "Object name"); Get_String (SizeOfLine(), xrefOffsetS, "xref Offset"); while (Buffer_Offset<Buffer_Size && (Buffer[Buffer_Offset]=='\r' || Buffer[Buffer_Offset]=='\n')) ++Buffer_Offset; int32u xref_Offset=atoi(xrefOffsetS.c_str()); Element_End0(); //Going to xref if (xref_Offset>Offsets_Max) Offsets_Max=xref_Offset; GoTo (xref_Offset); State=State_Parsing_xref; }
//--------------------------------------------------------------------------- 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_JPEG() { //Parsing Element_Begin1("Thumbail JPEG"); if (Element_Size>Element_Offset) Skip_XX(Element_Size-Element_Offset, "Data"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Aac::DSTSpecificConfig() { Element_Begin1("DSTSpecificConfig"); Skip_SB("DSDDST_Coded"); Skip_S2(14,"N_Channels"); Skip_SB("reserved"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Aac::HILNenexConfig() { Element_Begin1("HILNenexConfig"); bool HILNenhaLayer; Get_SB(HILNenhaLayer, "HILNenhaLayer"); if (HILNenhaLayer) Skip_S1(2, "HILNenhaQuantMode"); 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_Aac::ErrorResilientHvxcSpecificConfig() { Element_Begin1("ErrorResilientHvxcSpecificConfig"); bool isBaseLayer; Get_SB(isBaseLayer,"isBaseLayer"); if (isBaseLayer) { ErHVXCconfig(); } Element_End0(); }
//--------------------------------------------------------------------------- void File_Aac::HvxcSpecificConfig() { Element_Begin1("HvxcSpecificConfig"); bool isBaseLayer; Get_SB(isBaseLayer, "isBaseLayer"); if (isBaseLayer) HVXCconfig(); Element_End0(); }
//--------------------------------------------------------------------------- void File_Jpeg::APP0_JFFF_3B() { //Parsing Element_Begin1("Thumbail 3 bytes per pixel"); int8u ThumbailX, ThumbailY; Get_B1 (ThumbailX, "Xthumbail"); Get_B1 (ThumbailY, "Ythumbail"); Skip_XX(3*ThumbailX*ThumbailY, "RGB Thumbail"); Element_End0(); }
//--------------------------------------------------------------------------- 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_Aac::HILNconfig() { Element_Begin1("HILNconfig"); Skip_SB( "HILNquantMode"); Skip_S1(8, "HILNmaxNumLine"); Skip_S1(4, "HILNsampleRateCode"); Skip_S2(12, "HILNframeLength"); Skip_S1(2, "HILNcontMode"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Aac::HVXCconfig() { Element_Begin1("HVXCconfig"); Skip_SB( "HVXCvarMode"); Skip_S1(2, "HVXCrateMode"); Skip_SB( "extensionFlag"); //~ if (extensionFlag) { /*< to be defined in MPEG-4 Version 2 >*/ //~ } Element_End0(); }
//--------------------------------------------------------------------------- void File_Jpeg::APP0_JFFF_1B() { //Parsing Element_Begin1("Thumbail 1 byte per pixel"); int8u ThumbailX, ThumbailY; Get_B1 (ThumbailX, "Xthumbail"); Get_B1 (ThumbailY, "Ythumbail"); Skip_XX(768, "Palette"); Skip_XX(ThumbailX*ThumbailY, "Thumbail"); Element_End0(); }
//--------------------------------------------------------------------------- void File_Aac::ParametricSpecificConfig() { Element_Begin1("ParametricSpecificConfig"); bool isBaseLayer; Get_SB(isBaseLayer, "isBaseLayer"); if (isBaseLayer) PARAconfig(); else HILNenexConfig(); Element_End0(); }
//--------------------------------------------------------------------------- void File_Jpeg::APP1_EXIF() { //Parsing Element_Begin1("Exif"); int32u Alignment; Get_C4(Alignment, "Alignment"); if (Alignment==0x49492A00) Skip_B4( "First_IFD"); if (Alignment==0x4D4D2A00) Skip_L4( "First_IFD"); 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(); }