//--------------------------------------------------------------------------- void File_Dirac::picture_Fill() { Stream_Prepare(Stream_General); Fill(Stream_General, 0, General_Format, "Dirac"); Stream_Prepare(Stream_Video); Fill(Stream_Video, 0, Video_Format, "Dirac"); Fill(Stream_Video, 0, Video_Codec, "Dirac"); if (clean_width) Fill(Stream_Video, StreamPos_Last, Video_Width, clean_width); if (clean_height) Fill(Stream_Video, StreamPos_Last, Video_Height, clean_height); if (pixel_aspect_ratio) { Fill(Stream_Video, 0, Video_PixelAspectRatio, pixel_aspect_ratio); if (clean_height!=0) Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float)clean_width)/clean_height*pixel_aspect_ratio); } if (frame_rate) Fill(Stream_Video, StreamPos_Last, Video_FrameRate, frame_rate); Fill(Stream_Video, 0, Video_Colorimetry, Dirac_chroma_format(chroma_format)); Fill(Stream_Video, 0, Video_ScanType, Dirac_source_sampling(source_sampling)); Fill(Stream_Video, 0, Video_Interlacement, Dirac_source_sampling(source_sampling)); if (File_Offset+Buffer_Size<File_Size) { NextCode_Clear(); Accept("Dirac"); Finish("Dirac"); } }
//--------------------------------------------------------------------------- void File_Dirac::picture_Fill() { Stream_Prepare(Stream_General); Fill("Format", "Dirac"); Stream_Prepare(Stream_Video); Fill("Codec", "Dirac"); Fill("Width", clean_width); Fill("Height", clean_height); if (pixel_aspect_ratio) { Fill("PixelAspectRatio", pixel_aspect_ratio); if (clean_height!=0) Fill("DisplayAspectRatio", ((float)clean_width)/clean_height*pixel_aspect_ratio); } if (frame_rate) Fill("FrameRate", frame_rate); Fill("Chroma", Dirac_chroma_format(chroma_format)); Fill("Interlacement", Dirac_source_sampling(source_sampling)); if (File_Offset+Buffer_Size<File_Size) { NextCode_Clear(); Info("Dirac, Jumping to end of file"); Finnished(); } }
//--------------------------------------------------------------------------- void File_Dirac::Streams_Fill() { Stream_Prepare(Stream_Video); Fill(Stream_Video, 0, Video_Format, "Dirac"); Fill(Stream_Video, 0, Video_Codec, "Dirac"); if (clean_width) Fill(Stream_Video, StreamPos_Last, Video_Width, clean_width); if (clean_height) Fill(Stream_Video, StreamPos_Last, Video_Height, clean_height); if (pixel_aspect_ratio) { Fill(Stream_Video, 0, Video_PixelAspectRatio, pixel_aspect_ratio, 3, true); if (clean_height!=0) Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, ((float)clean_width)/clean_height*pixel_aspect_ratio, 3, true); } if (frame_rate) Fill(Stream_Video, StreamPos_Last, Video_FrameRate, frame_rate); Fill(Stream_Video, 0, Video_Colorimetry, Dirac_chroma_format(chroma_format)); Fill(Stream_Video, 0, Video_ScanType, Dirac_source_sampling(source_sampling)); Fill(Stream_Video, 0, Video_Interlacement, Dirac_source_sampling_Codec(source_sampling)); }
//--------------------------------------------------------------------------- // 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(); }