//--------------------------------------------------------------------------- // Packet "0E" void File_Vc1::EntryPointHeader() { Element_Name("EntryPointHeader"); //Parsing bool extended_mv; BS_Begin(); Skip_SB( "broken_link"); Skip_SB( "closed_entry"); Get_SB ( panscan_flag, "panscan_flag"); Skip_SB( "refdist_flag"); Skip_SB( "loopfilter"); Skip_SB( "fastuvmc"); Get_SB ( extended_mv, "extended_mv"); Skip_S1( 2, "dquant"); Skip_SB( "vstransform"); Skip_SB( "overlap"); Skip_S1( 2, "quantizer"); if (hrd_param_flag) for (int8u Pos=0; Pos<hrd_num_leaky_buckets; Pos++) { Element_Begin("leaky_bucket"); Skip_S2( 8, "hrd_full"); Element_End(); } TEST_SB_SKIP( "coded_size_flag"); Info_S2(12, coded_width, "coded_width"); Param_Info((coded_width+1)*2, " pixels"); Info_S2(12, coded_height, "coded_height"); Param_Info((coded_height+1)*2, " pixels"); TEST_SB_END(); if (extended_mv) Skip_SB( "extended_dmv"); TEST_SB_SKIP( "luma_sampling"); Skip_S1( 3, "y_range"); TEST_SB_END(); TEST_SB_SKIP( "chroma_sampling"); Skip_S1( 3, "uv_range"); TEST_SB_END(); BS_End(); FILLING_BEGIN(); //NextCode NextCode_Test(); NextCode_Clear(); NextCode_Add(0x0D); //Autorisation of other streams Streams[0x0D].Searching_Payload=true; EntryPoint_Parsed=true; FILLING_END(); }
//--------------------------------------------------------------------------- // Packet "B5" void File_AvsV::extension_start() { Element_Name("Extension"); //Parsing int8u extension_start_code_identifier; BS_Begin(); Get_S1 ( 4, extension_start_code_identifier, "extension_start_code_identifier"); Param_Info(AvsV_extension_start_code_identifier[extension_start_code_identifier]); Element_Info(AvsV_extension_start_code_identifier[extension_start_code_identifier]); switch (extension_start_code_identifier) { case 2 :{ //sequence_display //Parsing Get_S1 ( 3, video_format, "video_format"); Param_Info(AvsV_video_format[video_format]); Skip_SB( "sample_range"); TEST_SB_SKIP( "colour_description"); Skip_S1( 8, "colour_primaries"); Skip_S1( 8, "transfer_characteristics"); Skip_S1( 8, "matrix_coefficients"); TEST_SB_END(); Get_S2 (14, display_horizontal_size, "display_horizontal_size"); Mark_1 (); Get_S2 (14, display_vertical_size, "display_vertical_size"); Skip_SB( "reserved"); Skip_SB( "reserved"); BS_End(); } break; case 4 :{ //copyright //Parsing Skip_SB( "copyright_flag"); Skip_S1( 8, "copyright_id"); Skip_SB( "original_or_copy"); Skip_S1( 7, "reserved"); Mark_1 (); Info_S3(20, copyright_number_1, "copyright_number_1"); Mark_1 (); Info_S3(22, copyright_number_2, "copyright_number_2"); Mark_1 (); Info_S3(22, copyright_number_3, "copyright_number_3"); Param_Info(Ztring::ToZtring(((int64u)copyright_number_1<<44)+((int64u)copyright_number_2<<22)+(int64u)copyright_number_3, 16)); BS_End(); } break; case 11 :{ //camera_parameters //Parsing Skip_SB( "reserved"); Skip_S1( 7, "camera_id"); Mark_1 (); Skip_S3(22, "height_of_image_device"); Mark_1 (); Skip_S3(22, "focal_length"); Mark_1 (); Skip_S3(22, "f_number"); Mark_1 (); Skip_S3(22, "vertical_angle_of_view"); Mark_1 (); Skip_S3(16, "camera_position_x_upper"); Mark_1 (); Skip_S3(16, "camera_position_x_lower"); Mark_1 (); Skip_S3(16, "camera_position_y_upper"); Mark_1 (); Skip_S3(16, "camera_position_y_lower"); Mark_1 (); Skip_S3(16, "camera_position_z_upper"); Mark_1 (); Skip_S3(16, "camera_position_z_lower"); Mark_1 (); Skip_S3(22, "camera_direction_x"); Mark_1 (); Skip_S3(22, "camera_direction_y"); Mark_1 (); Skip_S3(22, "camera_direction_z"); Mark_1 (); Skip_S3(22, "camera_plane_vertical_x"); Mark_1 (); Skip_S3(22, "camera_plane_vertical_y"); Mark_1 (); Skip_S3(22, "camera_plane_vertical_z"); Mark_1 (); Skip_S4(32, "reserved"); BS_End(); } break; default:{ //Parsing Skip_S1(4, "data"); BS_End(); Skip_XX(Element_Size-Element_Offset, "data"); } } //Not sure, but the 3 first official files have this if (Element_Size-Element_Offset) { BS_Begin(); Mark_1(); BS_End(); } FILLING_BEGIN(); //NextCode NextCode_Test(); FILLING_END(); }
//--------------------------------------------------------------------------- // GASpecificConfig void File_Mpeg4_AudioSpecificConfig::GASpecificConfig () { Element_Begin("GASpecificConfig"); bool dependsOnCoreCoder, extensionFlag; Info_SB( frameLengthFlag, "frameLengthFlag"); Param_Info(frameLengthFlag==0?1024:960, " bytes"); Get_SB ( dependsOnCoreCoder, "dependsOnCoreCoder"); if (dependsOnCoreCoder) Skip_S2(14, "coreCoderDelay"); Get_SB ( extensionFlag, "extensionFlag"); if (channelConfiguration==0) { Element_Begin("Extension"); int8u Channels=0, Channels_Front=0, Channels_Side=0, Channels_Back=0, Channels_LFE=0; int8u num_front_channel_elements, num_side_channel_elements, num_back_channel_elements, num_lfe_channel_elements, num_assoc_data_elements, num_valid_cc_elements, comment_field_bytes; Skip_S1(4, "element_instance_tag"); Skip_S1(2, "object_type"); Skip_S1(4, "sampling_frequency_index"); //Not used, is often 0 Get_S1 (4, num_front_channel_elements, "num_front_channel_elements"); Get_S1 (4, num_side_channel_elements, "num_side_channel_elements"); Get_S1 (4, num_back_channel_elements, "num_back_channel_elements"); Get_S1 (2, num_lfe_channel_elements, "num_lfe_channel_elements"); Get_S1 (3, num_assoc_data_elements, "num_assoc_data_elements"); Get_S1 (4, num_valid_cc_elements, "num_valid_cc_elements"); TEST_SB_SKIP( "mono_mixdown_present"); Skip_S1(4, "mono_mixdown_element_number"); TEST_SB_END(); TEST_SB_SKIP( "stereo_mixdown_present"); Skip_S1(4, "stereo_mixdown_element_number"); TEST_SB_END(); TEST_SB_SKIP( "matrix_mixdown_idx_present"); Skip_S1(2, "matrix_mixdown_idx"); Skip_SB( "pseudo_surround_enable"); TEST_SB_END(); for (int8u Pos=0; Pos<num_front_channel_elements; Pos++) { Element_Begin("Front channel"); bool front_element_is_cpe; Get_SB ( front_element_is_cpe, "front_element_is_cpe"); Skip_S1(4, "front_element_tag_select"); if (front_element_is_cpe) { Channels_Front+=2; Channels+=2; } else { Channels_Front++; Channels++; } Element_End(); } for (int8u Pos=0; Pos<num_side_channel_elements; Pos++) { Element_Begin("Side channel"); bool side_element_is_cpe; Get_SB ( side_element_is_cpe, "side_element_is_cpe"); Skip_S1(4, "side_element_tag_select"); if (side_element_is_cpe) { Channels_Side+=2; Channels+=2; } else { Channels_Side++; Channels++; } Element_End(); } for (int8u Pos=0; Pos<num_back_channel_elements; Pos++) { Element_Begin("Back channel"); bool back_element_is_cpe; Get_SB ( back_element_is_cpe, "back_element_is_cpe"); Skip_S1(4, "back_element_tag_select"); if (back_element_is_cpe) { Channels_Back+=2; Channels+=2; } else { Channels_Back++; Channels++; } Element_End(); } for (int8u Pos=0; Pos<num_lfe_channel_elements; Pos++) { Element_Begin("LFE"); Skip_S1(4, "lfe_element_tag_select"); Channels_LFE++; Channels++; Element_End(); } for (int8u Pos=0; Pos<num_assoc_data_elements; Pos++) { Element_Begin("assoc_data_element"); Skip_S1(4, "assoc_data_element_tag_select"); Element_End(); } for (int8u Pos=0; Pos<num_valid_cc_elements; Pos++) { Element_Begin("valid_cc_element"); Skip_SB( "cc_element_is_ind_sw"); Skip_S1(4, "valid_cc_element_tag_select"); Element_End(); } BS_End(); //Byte align Get_B1 (comment_field_bytes, "comment_field_bytes"); if (comment_field_bytes) Skip_XX(comment_field_bytes, "comment_field_data"); BS_Begin(); //The stream needs continuity in the bitstream Element_End(); //Filling Ztring Channels_Positions, Channels_Positions2; switch (Channels_Front) { case 0 : break; case 1 : Channels_Positions+=_T("Front: C"); break; case 2 : Channels_Positions+=_T("Front: L R"); break; case 3 : Channels_Positions+=_T("Front: L C R"); break; default : Channels_Positions+=_T("Front: "); Channels_Positions+=Ztring::ToZtring(Channels_Front); //Which config? } switch (Channels_Side) { case 0 : break; case 1 : Channels_Positions+=_T(", Side: C"); break; case 2 : Channels_Positions+=_T(", Side: L R"); break; case 3 : Channels_Positions+=_T(", Side: L C R"); break; default : Channels_Positions+=_T(", Side: "); Channels_Positions+=Ztring::ToZtring(Channels_Side); //Which config? } switch (Channels_Back) { case 0 : break; case 1 : Channels_Positions+=_T(", Rear: C"); break; case 2 : Channels_Positions+=_T(", Rear: L R"); break; case 3 : Channels_Positions+=_T(", Rear: L C R"); break; default : Channels_Positions+=_T(", Rear: "); Channels_Positions+=Ztring::ToZtring(Channels_Back); //Which config? } switch (Channels_LFE) { case 0 : break; case 1 : Channels_Positions+=_T(", LFE"); break; default : Channels_Positions+=_T(", LFE= "); Channels_Positions+=Ztring::ToZtring(Channels_LFE); //Which config? } Channels_Positions2=Ztring::ToZtring(Channels_Front)+_T('/')+ Ztring::ToZtring(Channels_Side)+ (Channels_Back?(_T('/')+Ztring::ToZtring(Channels_Back)):Ztring())+ (Channels_LFE? (_T('.')+Ztring::ToZtring(Channels_LFE )):Ztring()); //Filling Accept("AudioSpecificConfig"); Stream_Prepare(Stream_Audio); Fill(Stream_Audio, StreamPos_Last, Audio_Channel_s_, Channels_Front+Channels_Side+Channels_Back+Channels_LFE); Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions, Channels_Positions); Fill(Stream_Audio, StreamPos_Last, Audio_ChannelPositions_String2, Channels_Positions2); } if (audioObjectType==06 || audioObjectType==20) Skip_S1(3, "layerNr"); if (extensionFlag) { bool extensionFlag3; if (audioObjectType==22) { Skip_S1( 5, "numOfSubFrame"); Skip_S2(11, "layer_length"); } if (audioObjectType==17 || audioObjectType==19 || audioObjectType==20 || audioObjectType==23) { Skip_SB( "aacSectionDataResilienceFlag"); Skip_SB( "aacScalefactorDataResilienceFlag"); Skip_SB( "aacSpectralDataResilienceFlag"); } Get_SB ( extensionFlag3, "extensionFlag3"); if (extensionFlag3) { //TODO... } } Element_End(); }
//--------------------------------------------------------------------------- // Packet "00" void File_Dirac::Sequence_header() { Element_Name("Sequence header"); //Parsing int32u version_major, version_minor, profile, level, base_video_format; BS_Begin(); Get_UI(version_major, "version major"); Get_UI(version_minor, "version minor"); Get_UI(profile, "profile"); Get_UI(level, "level"); if (version_major<=2) { Get_UI(base_video_format, "base video format"); //Param_Info1(Dirac_base_video_format(base_video_format)); Dirac_base_video_format(base_video_format, frame_width, frame_height, chroma_format, source_sampling, clean_width, clean_height, clean_left_offset, clean_top_offset, frame_rate, pixel_aspect_ratio); TEST_SB_SKIP( "custom dimensions flag"); Get_UI (frame_width, "frame width"); Get_UI (frame_height, "frame height"); TEST_SB_END(); TEST_SB_SKIP( "custom chroma format flag"); Get_UI (chroma_format, "chroma format"); Param_Info1(Dirac_chroma_format(chroma_format)); TEST_SB_END(); TEST_SB_SKIP( "custom scan format flag"); Get_UI (source_sampling, "source sampling"); Param_Info1(Dirac_source_sampling(source_sampling)); TEST_SB_END(); TEST_SB_SKIP( "frame rate flag"); int32u frame_rate_index; Get_UI (frame_rate_index, "index"); Param_Info1(Dirac_frame_rate(frame_rate_index)); if (frame_rate_index==0) { int32u frame_rate_numer, frame_rate_denom; Get_UI (frame_rate_numer, "frame rate numer"); Get_UI (frame_rate_denom, "frame rate denom"); frame_rate=((float32)frame_rate_numer)/((float32)frame_rate_denom); } else frame_rate=Dirac_frame_rate(frame_rate_index); TEST_SB_END(); TEST_SB_SKIP( "pixel aspect ratio flag"); int32u pixel_aspect_ratio_index; Get_UI (pixel_aspect_ratio_index, "index"); Param_Info1(Dirac_pixel_aspect_ratio(pixel_aspect_ratio_index)); if (pixel_aspect_ratio_index==0) { int32u pixel_aspect_ratio_numer, pixel_aspect_ratio_denom; Get_UI (pixel_aspect_ratio_numer, "pixel aspect ratio numer"); Get_UI (pixel_aspect_ratio_denom, "pixel aspect ratio denom"); pixel_aspect_ratio=((float32)pixel_aspect_ratio_numer)/((float32)pixel_aspect_ratio_denom); } else pixel_aspect_ratio=Dirac_pixel_aspect_ratio(pixel_aspect_ratio_index); TEST_SB_END(); TESTELSE_SB_SKIP( "custom clean area flag"); Get_UI (clean_width, "clean width"); Get_UI (clean_height, "clean height"); Get_UI (clean_left_offset, "clean left offset"); Get_UI (clean_top_offset, "clean top offset"); TESTELSE_SB_ELSE( "custom clean area flag"); clean_width=frame_width; clean_height=frame_height; TESTELSE_SB_END(); TEST_SB_SKIP( "custom signal range flag"); int32u custom_signal_range_index; Get_UI(custom_signal_range_index, "index"); if (custom_signal_range_index==0) { Skip_UI( "luma offset"); Skip_UI( "luma excursion"); Skip_UI( "chroma offset"); Skip_UI( "chroma excursion"); } TEST_SB_END(); TEST_SB_SKIP( "custom colour spec flag"); int32u custom_colour_spec_index; Get_UI(custom_colour_spec_index, "index"); if (custom_colour_spec_index==0) { TEST_SB_SKIP( "custom colour primaries flag"); Skip_UI( "custom colour primaries index"); TEST_SB_END(); TEST_SB_SKIP( "colour matrix flag"); Skip_UI( "colour matrix index"); TEST_SB_END(); TEST_SB_SKIP( "custom transfer function flag"); Skip_UI( "custom transfer function index"); TEST_SB_END(); } TEST_SB_END(); Info_UI(picture_coding_mode, "picture coding mode"); Param_Info1(Dirac_picture_coding_mode(picture_coding_mode)); } else { Skip_XX(Element_Size-Element_Offset, "Unknown"); } FILLING_BEGIN(); //Autorisation of other streams Streams[0x10].Searching_Payload=true; //End_of_Sequence Streams[0x20].Searching_Payload=true; //Auxiliary_data Streams[0x30].Searching_Payload=true; //Padding_data Streams[0x0C].Searching_Payload=true; //Intra_Reference_Picture Streams[0x08].Searching_Payload=true; //Intra_Non_Reference_Picture Streams[0x4C].Searching_Payload=true; //Intra_Reference_Picture_No Streams[0x48].Searching_Payload=true; //Intra_Non_Reference_Picture_No Streams[0x0D].Searching_Payload=true; //Inter_Reference_Picture_1 Streams[0x0E].Searching_Payload=true; //Inter_Reference_Picture_2 Streams[0x09].Searching_Payload=true; //Inter_Non_Reference_Picture_1 Streams[0x0A].Searching_Payload=true; //Inter_Non_Reference_Picture_2 Streams[0xCC].Searching_Payload=true; //Reference_Picture_Low Streams[0xC8].Searching_Payload=true; //Intra_Non_Reference_Picture_Low FILLING_END(); }
//--------------------------------------------------------------------------- // Packet "0F" void File_Vc1::SequenceHeader() { Element_Name("SequenceHeader"); //Parsing BS_Begin(); Get_S1 ( 2, profile, "profile"); Param_Info(Vc1_Profile[profile]); if (profile==0 || profile==1) //Simple or Main { Skip_S1( 2, "res_sm"); Skip_S1( 3, "frmrtq_postproc"); Skip_S1( 5, "bitrtq_postproc"); Skip_SB( "loopfilter"); Skip_SB( "res_x8"); Skip_SB( "multires"); Skip_SB( "res_fasttx"); Skip_SB( "fastuvmc"); Skip_SB( "extended_mv"); Skip_S1( 2, "dquant"); Skip_SB( "vtransform"); Skip_SB( "res_transtab"); Skip_SB( "overlap"); Skip_SB( "syncmarker"); Skip_SB( "rangered"); Skip_S1( 2, "maxbframes"); Skip_S1( 2, "quantizer"); Skip_SB( "finterpflag"); Skip_SB( "res_rtm_flag"); } else if (profile==3) //Advanced { Get_S1 ( 3, level, "level"); Get_S1 ( 2, colordiff_format, "colordiff_format"); Param_Info(Vc1_ColorimetryFormat[colordiff_format]); Skip_S1( 3, "frmrtq_postproc"); Skip_S1( 5, "bitrtq_postproc"); Skip_SB( "postprocflag"); Get_S2 (12, coded_width, "max_coded_width"); Param_Info((coded_width+1)*2, " pixels"); Get_S2 (12, coded_height, "max_coded_height"); Param_Info((coded_height+1)*2, " pixels"); Get_SB ( pulldown, "pulldown"); Get_SB ( interlace, "interlace"); Get_SB ( tfcntrflag, "tfcntrflag - frame counter"); Get_SB ( finterpflag, "finterpflag"); Skip_SB( "reserved"); Get_SB ( psf, "psf - progressive segmented frame"); TEST_SB_SKIP( "display_ext"); Info_S2(14, display_x, "display_horiz_size"); Param_Info(display_x+1, " pixels"); Info_S2(14, display_y, "display_vert_size"); Param_Info(display_y+1, " pixels"); TEST_SB_SKIP( "aspectratio_flag"); Get_S1 ( 4, AspectRatio, "aspect_ratio"); Param_Info(Vc1_PixelAspectRatio[AspectRatio]); if (AspectRatio==0x0F) { Get_S1 ( 8, AspectRatioX, "aspect_horiz_size"); Get_S1 ( 8, AspectRatioY, "aspect_vert_size"); } TEST_SB_END(); TEST_SB_GET(framerate_present, "framerate_flag"); TESTELSE_SB_GET(framerate_form, "framerateind"); Get_S2 (16, framerateexp, "framerateexp"); Param_Info((float32)((framerateexp+1)/32.0), 3, " fps"); TESTELSE_SB_ELSE( "framerateind"); Get_S1 ( 8, frameratecode_enr, "frameratenr"); Param_Info(Vc1_FrameRate_enr(frameratecode_enr)); Get_S1 ( 4, frameratecode_dr, "frameratedr"); Param_Info(Vc1_FrameRate_dr(frameratecode_dr)); TESTELSE_SB_END(); TEST_SB_END(); TEST_SB_SKIP( "color_format_flag"); Skip_S1( 8, "color_prim"); Skip_S1( 8, "transfer_char"); Skip_S1( 8, "matrix_coef"); TEST_SB_END(); TEST_SB_END(); TEST_SB_GET (hrd_param_flag, "hrd_param_flag"); Get_S1 ( 5, hrd_num_leaky_buckets, "hrd_num_leaky_buckets"); Skip_S1( 4, "bitrate_exponent"); Skip_S1( 4, "buffer_size_exponent"); for (int8u Pos=0; Pos<hrd_num_leaky_buckets; Pos++) { Element_Begin("leaky_bucket"); Skip_S2(16, "hrd_rate"); Skip_S2(16, "hrd_buffer"); Element_End(); } TEST_SB_END(); } else //forbidden { Element_DoNotTrust("Forbidden value"); } Mark_1(); BS_End(); FILLING_BEGIN(); //NextCode NextCode_Clear(); NextCode_Add(0x0D); NextCode_Add(0x0E); //Autorisation of other streams Streams[0x0D].Searching_Payload=true; Streams[0x0E].Searching_Payload=true; if (From_WMV3) FrameHeader_Fill(); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Adif::FileHeader_Parse() { //Parsing Ztring comment_field_data; int32u bitrate; int8u num_program_config_elements; int8u object_type=(int8u)-1; int8u sampling_frequency_index=(int8u)-1; int8u num_front_channel_elements=(int8u)-1; int8u num_side_channel_elements=(int8u)-1; int8u num_back_channel_elements=(int8u)-1; int8u num_lfe_channel_elements=(int8u)-1; int8u num_assoc_data_elements; int8u num_valid_cc_elements; bool bitstream_type; Skip_C4( "adif_id"); BS_Begin(); TEST_SB_SKIP( "copyright_id_present"); Skip_S4(32, "copyright_id"); Skip_S4(32, "copyright_id"); Skip_S4( 8, "copyright_id"); TEST_SB_END(); Skip_SB( "original_copy"); Skip_SB( "home"); Get_SB ( bitstream_type, "bitstream_type"); Param_Info(bitstream_type?"VBR":"CBR"); Get_S3 (23, bitrate, "bitrate"); Get_S1 ( 4, num_program_config_elements, "num_program_config_elements"); if (!bitstream_type) Skip_S3(20, "adif_buffer_fullness"); for (int8u Pos=0; Pos<num_program_config_elements+1; Pos++) { Element_Begin("program_config_element"); int8u comment_field_bytes; Skip_S1(4, "element_instance_tag"); Get_S1 (2, object_type, "object_type"); Param_Info(ADIF_object_type[object_type]); Get_S1 (4, sampling_frequency_index, "sampling_frequency_index"); Param_Info(ADIF_sampling_frequency[sampling_frequency_index]); Get_S1 (4, num_front_channel_elements, "num_front_channel_elements"); Get_S1 (4, num_side_channel_elements, "num_side_channel_elements"); Get_S1 (4, num_back_channel_elements, "num_back_channel_elements"); Get_S1 (2, num_lfe_channel_elements, "num_lfe_channel_elements"); Get_S1 (3, num_assoc_data_elements, "num_assoc_data_elements"); Get_S1 (4, num_valid_cc_elements, "num_valid_cc_elements"); TEST_SB_SKIP( "mono_mixdown_present"); Skip_S1(4, "mono_mixdown_element_number"); TEST_SB_END(); TEST_SB_SKIP( "stereo_mixdown_present"); Skip_S1(4, "stereo_mixdown_element_number"); TEST_SB_END(); TEST_SB_SKIP( "matrix_mixdown_idx_present"); Skip_S1(2, "matrix_mixdown_idx"); Skip_S1(2, "pseudo_surround_enable"); TEST_SB_END(); for (int8u Pos2=0; Pos2<num_front_channel_elements; Pos2++) { Element_Begin("front_channel_element"); Skip_SB( "front_element_is_cpe"); Skip_S1(4, "front_element_tag_select"); Element_End(); } for (int8u Pos2=0; Pos2<num_side_channel_elements; Pos2++) { Element_Begin("side_channel_element"); Skip_SB( "back_element_is_cpe"); Skip_S1(4, "back_element_tag_select"); Element_End(); } for (int8u Pos2=0; Pos2<num_back_channel_elements; Pos2++) { Element_Begin("back_channel_element"); Skip_SB( "back_element_is_cpe"); Skip_S1(4, "back_element_tag_select"); Element_End(); } for (int8u Pos2=0; Pos2<num_lfe_channel_elements; Pos2++) { Element_Begin("lfe_channel_element"); Skip_S1(4, "lfe_element_tag_select"); Element_End(); } for (int8u Pos2=0; Pos2<num_assoc_data_elements; Pos2++) { Element_Begin("assoc_data_element"); Skip_S1(4, "assoc_data_element_tag_select"); Element_End(); } for (int8u Pos2=0; Pos2<num_valid_cc_elements; Pos2++) { Element_Begin("valid_cc_element"); Skip_SB( "cc_element_is_ind_sw"); Skip_S1(4, "valid_cc_element_tag_select"); Element_End(); } BS_End(); Get_B1 (comment_field_bytes, "comment_field_bytes"); if (comment_field_bytes>0) Get_Local(comment_field_bytes, comment_field_data, "comment_field_data"); BS_Begin(); Element_End(); //We only support 1 element in ADIF Pos=num_program_config_elements; } BS_End(); FILLING_BEGIN(); File__Tags_Helper::Stream_Prepare(Stream_General); Fill(Stream_General, 0, General_Format, "ADIF"); Fill(Stream_General, 0, General_Comment, comment_field_data); File__Tags_Helper::Stream_Prepare(Stream_Audio); Fill (Stream_Audio, 0, Audio_Format, "AAC"); Fill (Stream_Audio, 0, Audio_Format_Version, "Version 2"); if (object_type!=(int8u)-1) Fill (Stream_Audio, 0, Audio_Format_Profile, ADIF_Format_Profile[object_type]); Fill (Stream_Audio, 0, Audio_Codec, ADIF_object_type[object_type]); Fill(Stream_Audio, 0, Audio_BitRate_Mode, bitstream_type?"VBR":"CBR"); if (bitrate>0) Fill(Stream_Audio, 0, bitstream_type?Audio_BitRate_Maximum:Audio_BitRate, bitrate); if (sampling_frequency_index!=(int8u)-1) Fill(Stream_Audio, 0, Audio_SamplingRate, ADIF_sampling_frequency[sampling_frequency_index]); if (num_front_channel_elements!=(int8u)-1) Fill(Stream_Audio, 0, Audio_Channel_s_, num_front_channel_elements+num_side_channel_elements+num_back_channel_elements+num_lfe_channel_elements); Fill(Stream_Audio, 0, Audio_Resolution, 16); Fill(Stream_Audio, 0, Audio_MuxingMode, "ADIF"); //No more need data File__Tags_Helper::Accept("ADIF"); File__Tags_Helper::Finish("ADIF"); FILLING_END(); }