//--------------------------------------------------------------------------- void File_Caf::desc() { //Parsing float64 SampleRate; int32u FormatID, FormatFlags, BytesPerPacket, FramesPerPacket, ChannelsPerFrame, BitsPerChannel; Get_BF8(SampleRate, "SampleRate"); Get_C4 (FormatID, "FormatID"); Get_B4 (FormatFlags, "FormatFlags"); Get_B4 (BytesPerPacket, "BytesPerPacket"); Get_B4 (FramesPerPacket, "FramesPerPacket"); Get_B4 (ChannelsPerFrame, "ChannelsPerFrame"); Get_B4 (BitsPerChannel, "BitsPerChannel"); FILLING_BEGIN(); if (SampleRate) Fill(Stream_Audio, 0, Audio_SamplingRate, SampleRate); CodecID_Fill(Ztring().From_CC4(FormatID), Stream_Audio, 0, InfoCodecID_Format_Mpeg4); if (ChannelsPerFrame) Fill(Stream_Audio, 0, Audio_Channel_s_, ChannelsPerFrame); if (BitsPerChannel) Fill(Stream_Audio, 0, Audio_BitDepth, BitsPerChannel); if (BytesPerPacket && SampleRate && FramesPerPacket) Fill(Stream_Audio, 0, Audio_BitRate, SampleRate*BytesPerPacket*8/FramesPerPacket); FILLING_END(); }
//--------------------------------------------------------------------------- void File_Ivf::FileHeader_Parse() { //Parsing int32u frame_rate_num, frame_rate_den, frame_count, fourcc; int16u version, header_size, width, height; Skip_C4 ( "Signature"); Get_L2 (version, "Version"); if (version==0) { Get_L2 (header_size, "Header Size"); if (header_size>=32) { Get_C4 (fourcc, "Fourcc"); Get_L2 (width, "Width"); Get_L2 (height, "Height"); Get_L4 (frame_rate_num, "FrameRate Numerator"); Get_L4 (frame_rate_den, "FrameRate Denominator"); Get_L4 (frame_count, "Frame Count"); Skip_L4( "Unused"); if (header_size-32) Skip_XX(header_size-32, "Unknown"); } else { fourcc=0x00000000; width=0; height=0; frame_rate_num=0; frame_rate_den=0; frame_count=0; } } else { header_size=0; fourcc=0x00000000; width=0; height=0; frame_rate_num=0; frame_rate_den=0; frame_count=0; } FILLING_BEGIN(); Accept("IVF"); Fill(Stream_General, 0, General_Format, "IVF"); if (version==0 && header_size>=32) { Stream_Prepare(Stream_Video); CodecID_Fill(Ztring().From_CC4(fourcc), Stream_Video, 0, InfoCodecID_Format_Riff); Fill(Stream_Video, 0, Video_FrameRate, (float)frame_rate_num / frame_rate_den); Fill(Stream_Video, 0, Video_FrameCount, frame_count); Fill(Stream_Video, 0, Video_Width, width); Fill(Stream_Video, 0, Video_Height, height); Fill(Stream_Video, 0, Video_StreamSize, File_Size-header_size-12*frame_count); //Overhead is 12 byte per frame } //No more need data Finish("IVF"); FILLING_END(); }