//--------------------------------------------------------------------------- void Riff_AVI__hdrl_strl_indx::Read_Internal () { //Filling Global->AVI__hdrl_strl_indx_Pointers.insert(this); //Reading Read_Internal_ReadAllInBuffer(); //Parsing int32u Entry_Count, ChunkId; int16u LongsPerEntry; int8u IndexType, IndexSubType; Get_L2 (LongsPerEntry); Get_L1 (IndexSubType); Get_L1 (IndexType); Get_L4 (Entry_Count); Get_C4 (ChunkId); //Integrity if (LongsPerEntry!=4 || (IndexSubType&0xFE) || IndexType!=0x00 || 24+Entry_Count*16>Chunk.Content.Size) throw exception_valid("hdrl_strl_indx form is not supported"); //Parsing Skip_XX(12); //Reserved for (int32u Pos=0; Pos<Entry_Count; Pos++) { int64u Offset; Get_L8 (Offset); Skip_XX(8); //Size + Duration //Filling Global->AVI__hdrl_strl_indx_In_Position_Indexes_List.push_back(Offset); Global->AVI__movi___ix_WithFields[ChunkId]=(IndexSubType&0x01)?true:false; } }
//--------------------------------------------------------------------------- void File_Ogg::Header_Parse() { //Parsing int64u absolute_granule_position; int32u stream_serial_number, page_sequence_no; int16u total_page_size; int8u stream_structure_version, flags, page_segments, packet_lacing_value; Skip_C4( "capture_pattern"); Get_L1 (stream_structure_version, "stream_structure_version"); Get_L1 (flags, "header_type_flag"); Get_Flags (flags, 0, continued, "continued packet"); Skip_Flags(flags, 1, "first page of logical bitstream (bos)"); Skip_Flags(flags, 2, "last page of logical bitstream (eos)"); Get_L8 (absolute_granule_position, "absolute granule position"); Get_L4 (stream_serial_number, "stream serial number"); Get_L4 (page_sequence_no, "page sequence no"); Skip_L4( "page checksum"); Get_L1 (page_segments, "page_segments"); total_page_size=0; Chunk_Sizes.clear(); Chunk_Sizes.push_back(0); for (int8u Pos=0; Pos<page_segments; Pos++) { Get_L1 (packet_lacing_value, "packet lacing value"); total_page_size+=packet_lacing_value; Chunk_Sizes[Chunk_Sizes.size()-1]+=packet_lacing_value; if (packet_lacing_value!=0xFF) { Chunk_Sizes.push_back(0); Chunk_Sizes_Finnished=true; } else Chunk_Sizes_Finnished=false; } if (Chunk_Sizes_Finnished) Chunk_Sizes.resize(Chunk_Sizes.size()-1); //Keep out the last value //Filling Header_Fill_Size(27+page_segments+total_page_size); Header_Fill_Code(stream_serial_number, Ztring::ToZtring(stream_serial_number, 16)); Stream[stream_serial_number].absolute_granule_position=absolute_granule_position; }
//--------------------------------------------------------------------------- void File_Wm::Header_Parse() { if (!MustUseAlternativeParser) { //Parsing int128u Name; int64u Size; Get_GUID(Name, "Name"); Get_L8 (Size, "Size"); //Filling Header_Fill_Code(Name.hi, Ztring().From_GUID(Name)); Header_Fill_Size(Size); } else { Header_Fill_Code(0, "Packet"); Header_Fill_Size(MaximumDataPacketSize); } }
//--------------------------------------------------------------------------- void File_Ogg::Header_Parse() { //Specific case if (SizedBlocks) { int16u Size; Get_B2 (Size, "Size"); Chunk_Sizes.clear(); Chunk_Sizes.push_back(Size); Header_Fill_Size(2+Size); Header_Fill_Code(0, Ztring::ToZtring(0, 16)); return; } if (XiphLacing) { if (Chunk_Sizes.empty()) { int8u CountMinus1; Get_B1 (CountMinus1, "Number of frames minus one"); int64u UsedSize=0; for (size_t Pos=0; Pos<CountMinus1; Pos++) { int32u Size=0; int8u Size8; do { Get_B1 (Size8, "Size"); Size+=Size8; } while (Size8==0xFF); Param_Info1(Size); Chunk_Sizes.push_back(Size); UsedSize+=Size; } Chunk_Sizes.push_back((size_t)(Element_Size-UsedSize-1)); } Header_Fill_Size(Element_Size); Header_Fill_Code(0, Ztring::ToZtring(0, 16)); return; } //Parsing int64u absolute_granule_position; int32u stream_serial_number, page_sequence_no; int16u total_page_size; int8u stream_structure_version, flags, page_segments, packet_lacing_value; Skip_C4( "capture_pattern"); Get_L1 (stream_structure_version, "stream_structure_version"); Get_L1 (flags, "header_type_flag"); Get_Flags (flags, 0, continued, "continued packet"); Skip_Flags(flags, 1, "first page of logical bitstream (bos)"); Get_Flags (flags, 2, eos, "last page of logical bitstream (eos)"); Get_L8 (absolute_granule_position, "absolute granule position"); Get_L4 (stream_serial_number, "stream serial number"); Get_L4 (page_sequence_no, "page sequence no"); Skip_L4( "page checksum"); Get_L1 (page_segments, "page_segments"); total_page_size=0; Chunk_Sizes.clear(); Chunk_Sizes.push_back(0); for (int8u Pos=0; Pos<page_segments; Pos++) { Get_L1 (packet_lacing_value, "packet lacing value"); total_page_size+=packet_lacing_value; Chunk_Sizes[Chunk_Sizes.size()-1]+=packet_lacing_value; if (packet_lacing_value!=0xFF) { Chunk_Sizes.push_back(0); Chunk_Sizes_Finished=true; } else Chunk_Sizes_Finished=false; } if (Chunk_Sizes_Finished) Chunk_Sizes.resize(Chunk_Sizes.size()-1); //Keep out the last value //Filling Header_Fill_Size(27+page_segments+total_page_size); Header_Fill_Code(stream_serial_number, Ztring::ToZtring(stream_serial_number, 16)); Stream[stream_serial_number].absolute_granule_position=absolute_granule_position; }