Opened 11 years ago

Closed 11 years ago

#1041 closed enhancement (invalid)

Undefined behaviour if num_ref_idx_l0_active_minus1 >= NumPocTotalCurr and ref_pic_list_modification_flag_l0==0

Reported by: peterderivaz Owned by:
Priority: minor Milestone: D10
Component: Text Version: D10 (L1003) v28
Keywords: Cc: bbross, wjhan, jct-vc@…


What should be the behaviour if ref_pic_list_modification_flag_l0 == 0 and num_ref_idx_l0_active_minus1 >= NumPocTotalCurr?

This is important in 8.3.4 "Decoding process for reference picture lists construction" of JCTVC-L1003_v29.

RefPicList0[num_ref_idx_l0_active_minus1] is a function of RefPicListTemp0[num_ref_idx_l0_active_minus1], but this value will not have been defined if NumPocTotalCurr is too small.

In other words, what should happen if num_ref_idx_l0_active_minus1 specifies more reference pictures than have been defined in the reference picture sets? I am guessing that this is not allowed, but I can't see where it is explicitly forbidden.

I suggest adding an additional restriction to the semantics for num_ref_idx_l0_default_active_minus1 to prohibit this case.

(A similar change would be needed for num_ref_idx_l1_default_active_minus1)

Change History (4)

comment:1 Changed 11 years ago by DefaultCC Plugin

  • Cc bbross wjhan jct-vc@… added

comment:2 Changed 11 years ago by yk

This is already clear in the text, as the following clearly specifies the behavior when ref_pic_list_modification_flag_l0 == 0 and num_ref_idx_l0_active_minus1 >= NumPocTotalCurr (and there is a similar process for list 1):

The variable NumRpsCurrTempList0 is set equal to Max( num_ref_idx_l0_active_minus1 + 1, NumPocTotalCurr ) and the list RefPicListTemp0 is constructed as follows:

rIdx = 0
while( rIdx < NumRpsCurrTempList0 ) {

for( i = 0; i < NumPocStCurrBefore && rIdx < NumRpsCurrTempList0; rIdx++, i++ )

RefPicListTemp0[ rIdx ] = RefPicSetStCurrBefore[ i ]

for( i = 0; i < NumPocStCurrAfter && rIdx < NumRpsCurrTempList0; rIdx++, i++ )

RefPicListTemp0[ rIdx ] = RefPicSetStCurrAfter[ i ]

for( i = 0; i < NumPocLtCurr && rIdx < NumRpsCurrTempList0; rIdx++, i++ )

RefPicListTemp0[ rIdx ] = RefPicSetLtCurr[ i ]


comment:3 Changed 11 years ago by peterderivaz

Thanks for the comment, you are quite right and this ticket can be marked as invalid.

In my reading I hadn't spotted that there was a while loop before the for loops.

Thanks for the help!

comment:4 Changed 11 years ago by ksuehring

  • Resolution set to invalid
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.

This list contains all users that will be notified about changes made to this ticket.

These roles will be notified: Reporter, Owner, Subscriber, Participant

  • Benjamin Bross(Subscriber)
  • jct-vc@…(Subscriber)
  • karl.sharman@…(Always)
  • Karsten Suehring(Participant, Always)
  • Peter de Rivaz(Reporter, Participant)
  • Woo-Jin Han(Subscriber)
  • Ye-Kui Wang(Participant)