@@ -604,6 +604,20 @@ pub fn parse_slice_header(
604604 read_value ! ( input, header. redundant_pic_cnt, ue) ;
605605 }
606606
607+ if matches ! ( header. slice_type, SliceType :: P | SliceType :: SP | SliceType :: B ) {
608+ let num_ref_idx_active_override_flag: bool ;
609+ read_value ! ( input, num_ref_idx_active_override_flag, f) ;
610+ if num_ref_idx_active_override_flag {
611+ read_value ! ( input, header. num_ref_idx_l0_active_minus1, ue) ;
612+ if header. slice_type == SliceType :: B {
613+ read_value ! ( input, header. num_ref_idx_l1_active_minus1, ue) ;
614+ }
615+ } else {
616+ header. num_ref_idx_l0_active_minus1 = pps. num_ref_idx_l0_default_active_minus1 ;
617+ header. num_ref_idx_l1_active_minus1 = pps. num_ref_idx_l1_default_active_minus1 ;
618+ }
619+ }
620+
607621 if nal. nal_ref_idc != 0 {
608622 header. dec_ref_pic_marking = Some ( parse_dec_ref_pic_marking ( input, idr_pic_flag) ?) ;
609623 }
@@ -743,6 +757,7 @@ fn calc_prev_intra4x4_pred_mode(
743757 result
744758}
745759
760+ // Section 7.3.5 Macroblock layer syntax
746761pub fn parse_macroblock ( input : & mut BitReader , slice : & Slice ) -> ParseResult < Macroblock > {
747762 let mb_type_val: u32 ;
748763 read_value ! ( input, mb_type_val, ue) ;
@@ -763,8 +778,22 @@ pub fn parse_p_macroblock(
763778) -> ParseResult < Macroblock > {
764779 let mut block = PMb { mb_type, ..PMb :: default ( ) } ;
765780 let this_mb_addr = slice. get_next_mb_addr ( ) ;
781+ let num_mb_part = block. NumMbPart ( ) ;
782+
766783 /*
767784 TODO: Parse motion vectors here
785+
786+
787+ let ref_idx_l0 = [0u8;4];
788+ let ref_idx_l1 = [0u8;4];
789+ for part_idx in 0..num_mb_part {
790+ if slice.header.num_ref_idx_l0_active_minus1 > 0 &&
791+ block.MbPartPredMode(part_idx) != MbPredictionMode::Pred_L1 {
792+
793+ }
794+
795+ }
796+
768797 */
769798
770799 let coded_block_pattern_num: u8 ;
0 commit comments