//--------------------------------------------------------------------------- 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); }
//--------------------------------------------------------------------------- void File_Dts::Header_Parse() { //Parsing int16u Primary_Frame_Byte_Size_minus_1; int8u EncoderSoftwareRevision; bool crc_present; Skip_B4( "Sync"); BS_Begin(); Info_SB( FrameType, "Frame Type"); Param_Info(DTS_FrameType[FrameType]); Skip_S1( 5, "Deficit Sample Count"); Get_SB ( crc_present, "CRC Present"); Skip_S1( 7, "Number of PCM Sample Blocks"); Get_S2 (14, Primary_Frame_Byte_Size_minus_1, "Primary Frame Byte Size minus 1"); Primary_Frame_Byte_Size_minus_1+=1; if (!Word) Primary_Frame_Byte_Size_minus_1=Primary_Frame_Byte_Size_minus_1*8/14*2; Param_Info(Ztring::ToZtring(Primary_Frame_Byte_Size_minus_1)+_T(" bytes")); //Word is on 14 bits! Get_S1 ( 6, channel_arrangement, "Audio Channel Arrangement"); Param_Info(Ztring::ToZtring(DTS_Channels[channel_arrangement])+_T(" channels")); Get_S1 ( 4, sample_frequency, "Core Audio Sampling Frequency"); Param_Info(Ztring::ToZtring(DTS_SamplingRate[sample_frequency])+_T(" Hz")); Get_S1 ( 5, bit_rate, "Transmission Bit Rate"); Param_Info(Ztring::ToZtring(DTS_BitRate[bit_rate])+_T(" bps")); Skip_SB( "Embedded Down Mix Enabled"); Skip_SB( "Embedded Dynamic Range"); Skip_SB( "Embedded Time Stamp"); Skip_SB( "Auxiliary Data"); Skip_SB( "HDCD"); Get_S1 ( 3, ExtensionAudioDescriptor, "Extension Audio Descriptor"); Param_Info(DTS_ExtensionAudioDescriptor[ExtensionAudioDescriptor]); Get_SB ( ExtendedCoding, "Extended Coding"); Skip_SB( "Audio Sync Word Insertion"); Get_S1 ( 2, lfe_effects, "Low Frequency Effects"); Skip_SB( "Predictor History"); if (crc_present) Skip_S2(16, "Header CRC Check"); Skip_SB( "Multirate Interpolator"); Get_S1 ( 4, EncoderSoftwareRevision, "Encoder Software Revision"); Skip_S1( 2, "Copy History"); Get_S1 ( 2, bits_per_sample, "Source PCM Resolution"); Param_Info(Ztring::ToZtring(DTS_Resolution[bits_per_sample])+_T(" bits")); Skip_SB( "ES"); Skip_SB( "Front Sum/Difference"); Skip_SB( "Surrounds Sum/Difference"); Skip_S1( 4, "Dialog Normalisation Parameter"); switch (EncoderSoftwareRevision) { case 6 : Skip_S1( 4, "Dialog Normalisation Parameter"); break; case 7 : Skip_S1( 4, "Dialog Normalisation Parameter"); break; default : Skip_S1( 4, "Unspecified"); break; } BS_End(); //Filling Header_Fill_Size(Primary_Frame_Byte_Size_minus_1+DTS_HD_Unknown_Size); //TODO: change this, for DTS-HD Header_Fill_Code(0, "Frame"); }
//--------------------------------------------------------------------------- // 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(); }