Opened 10 years ago

Closed 9 years ago

#306 closed defect (fixed)

bugs in reference picture list code

Reported by: eeehey Owned by:
Priority: major Milestone: HM-6.0
Component: HM Version: HM-5.1
Keywords: reference list Cc: fbossen, ksuehring, davidf, jct-vc@…

Description

  1. HM5.1, TComSlice.cpp line 628:

if(m_RefPicListModification.getRefPicListModificationFlagL0())
{

for( i = 0; i < m_RefPicListModification.getNumberOfRefPicListModificationsL0(); i++)
{

for( cIdx = num_ref_idx_l1_active_minus1 + 1; cIdx > i; cIdx-- )

m_apcRefPicList[0][ cIdx ] = m_apcRefPicList[0][ cIdx - 1];

...

num_ref_idx_l1_active_minus1 shall be num_ref_idx_l0_active_minus1 for this is modification for list 0.

  1. TEncCAVLC.cpp line 907:

if(pcSlice->getRefPicListModificationFlagLC())
{

for (UInt i=0;i<pcSlice->getNumRefIdx(REF_PIC_LIST_C);i++)
{

WRITE_FLAG( pcSlice->getListIdFromIdxOfLC(i), "pic_from_list_0_flag" );
WRITE_UVLC( pcSlice->getRefIdxFromIdxOfLC(i), "ref_idx_list_curr" );

}

}

pcSlice->getListIdFromIdxOfLC return 0 for list0 and 1 for list1. WD states pic_from_list_0_flag is 1 for list0 and 0 for list1. The code write 0 for list0 and 1 for list1, shall write 1 for list0 and 0 for list1.

  1. TDecCAVLC.cpp line 1032:

READ_FLAG( uiCode, "ref_pic_list_modification_flag_lc" ); rpcSlice->setRefPicListModificationFlagLC( uiCode ? 1 : 0 );
if(uiCode)
{

for (UInt i=0;i<rpcSlice->getNumRefIdx(REF_PIC_LIST_C);i++)
{

READ_FLAG( uiCode, "pic_from_list_0_flag" );
rpcSlice->setListIdFromIdxOfLC(i, uiCode);
READ_UVLC( uiCode, "ref_idx_list_curr" );
rpcSlice->setRefIdxFromIdxOfLC(i, uiCode);
rpcSlice->setRefIdxOfLC((RefPicList)rpcSlice->getListIdFromIdxOfLC(i), rpcSlice->getRefIdxFromIdxOfLC(i), i);

}

}

The code select list0 when receiving pic_from_list_0_flag equals 0, and select list1 when receiving pic_from_list_0_flag equals 1. This is opposite to WD.

Attachments (1)

reference_list_bug_fix.patch (1.9 KB) - added by eeehey 10 years ago.
patch of the bug reported in #306

Download all attachments as: .zip

Change History (5)

comment:1 Changed 10 years ago by DefaultCC Plugin

  • Cc fbossen ksuehring davidf jct-vc@… added

Changed 10 years ago by eeehey

patch of the bug reported in #306

comment:2 Changed 10 years ago by ksuehring

The first one is a simple copy&paste bug.

On the second one, I'm not sure if I understand the data structures. Maybe it would be better to save the bit as it is coded in the bitstream and change the list construction logic to take the different interpretation into account instead of flipping that bit in the read/write functions. Of course this would require a bigger patch, but that would be preferable if it makes the code better understandable.

I think the second part independent of the adoption of JCTVC-H0137/H0138, right?

comment:3 Changed 10 years ago by eeehey

You are right, the second part is independent of the adoption of JCTVC-H0137/H0138.

Changing the list construction logic does require bigger patch since it requires changes in both encoder and decoder. Fliping the bit is a quick fix, but not that neat.

comment:4 Changed 9 years ago by ksuehring

  • Milestone set to HM-6.0
  • Resolution set to fixed
  • Status changed from new to closed

The combined list signaling has been removed from the spec. So the first part was fixed, the second is "won't fix". I'm closing the ticket as "fixed".

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

  • David Flynn(Subscriber)
  • Frank Bossen(Subscriber)
  • jct-vc@…(Subscriber)
  • karl.sharman@…(Always)
  • Karsten Suehring(Subscriber, Participant, Always)
  • Yong He(Reporter, Participant)