//--------------------------------------------------------------------------- void File_MpcSv8::SH() { //Parsing int64u SampleCount; int8u Version, SampleFrequency, ChannelCount; bool MidSideStereo; Skip_B4( "CRC32"); Get_B1 (Version, "Version"); Get_VS (SampleCount, "Sample count"); Skip_VS( "Beginning silence"); BS_Begin(); Get_S1 (3, SampleFrequency, "Sample frequency"); Param_Info(Mpc_SampleFreq[SampleFrequency]); Skip_S1(5, "Max used bands"); Get_S1 (4, ChannelCount, "Channel count"); Get_SB ( MidSideStereo, "Mid side stereo used"); Skip_S1(3, "Audio block frames"); BS_End(); //Filling FILLING_BEGIN(); Fill(Stream_Audio, 0, Audio_SamplingRate, Mpc_SampleFreq[SampleFrequency]); if (SampleCount) { Fill(Stream_Audio, 0, Audio_SamplingCount, SampleCount); Fill(Stream_Audio, 0, Audio_Duration, SampleCount*1000/Mpc_SampleFreq[SampleFrequency]); Fill(Stream_Audio, 0, Audio_BitRate, File_Size*8*Mpc_SampleFreq[SampleFrequency]/SampleCount); //Should be more precise... } Fill(Stream_Audio, 0, Audio_Resolution, 16); //MPC support only 16 bits FILLING_END(); }
//--------------------------------------------------------------------------- void File_Nut::stream() { Element_Name("stream"); //Parsing int64u stream_class, fourcc_length, codec_specific_data_length; Skip_VS( "stream_id"); Get_VS (stream_class, "stream_class"); Get_VS (fourcc_length, "fourcc length"); switch (fourcc_length) { case 2 : Skip_C2( "fourcc"); break; case 4 : Skip_C4( "fourcc"); break; default: Skip_XX(fourcc_length, "fourcc"); } Skip_VS( "time_base_id"); Skip_VS( "msb_pts_shift"); Skip_VS( "max_pts_distance"); Skip_VS( "decode_delay"); Skip_VS( "stream_flags"); Get_VS (codec_specific_data_length, "codec_specific_data length"); Skip_XX(codec_specific_data_length, "codec_specific_data"); switch (stream_class) { case 0 : //video { Skip_VS( "width"); Skip_VS( "height"); Skip_VS( "sample_width"); Skip_VS( "sample_height"); Skip_VS( "colorspace_type"); } break; case 1 : //audio { Skip_VS( "samplerate_num"); Skip_VS( "samplerate_denom"); Skip_VS( "channel_count"); } break; case 2 : //subtitles { } break; case 3 : //userdata { } break; default: ; } if (Element_Offset!=Element_Size) Skip_XX(Element_Size - Element_Offset, "Data"); }
//--------------------------------------------------------------------------- void File_Nut::main() { Element_Name("main"); //Parsing int64u time_base_count; Skip_VS( "version"); Skip_VS( "stream_count"); Skip_VS( "max_distance"); Get_VS (time_base_count, "time_base_count"); for(int64u i=0; i<time_base_count; i++) { Skip_VS( "time_base_num"); Skip_VS( "time_base_denom"); //time_base[i]= time_base_num/time_base_denom } int64u tmp_mul=1, tmp_stream=0; int64s tmp_pts=0; for(int16u i=0; i<256;) { int64u tmp_fields, tmp_size, tmp_res, count; Skip_VS( "tmp_flag"); Get_VS (tmp_fields, "tmp_fields"); if(tmp_fields>0) Skip_VS( "tmp_pts"); //TODO: signed if(tmp_fields>1) Skip_VS( "tmp_mul"); if(tmp_fields>2) Skip_VS( "tmp_stream"); if(tmp_fields>3) Get_VS (tmp_size, "tmp_size"); else tmp_size=0; if(tmp_fields>4) Get_VS (tmp_res, "tmp_res"); else tmp_res=0; if(tmp_fields>5) Get_VS(count, "count"); else count=tmp_mul-tmp_size; for(int64u j=6; j<tmp_fields; j++) Skip_VS( "tmp_reserved[i]"); for(int64u j=0; j<count && i<256; j++, i++) { if (i == 'N') { //flags[i]= FLAG_INVALID; j--; continue; } //flags[i]= tmp_flag; //stream_id[i]= tmp_stream; //data_size_mul[i]= tmp_mul; //data_size_lsb[i]= tmp_size + j; //pts_delta[i]= tmp_pts; //reserved_count[i]= tmp_res; } } }
//--------------------------------------------------------------------------- void File_MpcSv8::SO() { //Parsing Skip_VS( "Offset"); }