Opened 4 years ago

Closed 4 years ago

#1470 closed defect (fixed)

Difference between spec and HM in Equation (8-9)

Reported by: Haruhiko Owned by:
Priority: minor Milestone:
Component: HM SCC Version:
Keywords: SCM8.4 Cc: jct-vc@…

Description

Equation(8-9) in spec:

for(rIdx = 0; rIdx <= num_ref_idx_l0_active_minus1; rIdx++)
    RefPicList0[rIdx] = ref_pic_list_modification_flag_l0 ? RefPicListTemp0[list_entry_l0[rIdx]] : RefPicListTemp0[rIdx]
if(pps_curr_pic_ref_enabled_flag && !ref_pic_list_modification_flag_l0 && NumRpsCurrTempList0 > (num_ref_idx_l0_active_minus1 + 1))
    RefPicList0[num_ref_idx_l0_active_minus1] = currPic

But function TComSlice::setRefPOCListSliceHeader() in HM16.15_SCM8.4:

  for (Int rIdx = 0; rIdx < m_aiNumRefIdx[REF_PIC_LIST_0]; rIdx ++)
  {
    cIdx = m_RefPicListModification.getRefPicListModificationFlagL0() ? m_RefPicListModification.getRefPicSetIdxL0(rIdx) : rIdx % numPicTotalCurr;
    assert(cIdx >= 0 && cIdx < numPicTotalCurr);
    m_aiRefPOCList[REF_PIC_LIST_0][rIdx] = rpsPOCCurrList0[cIdx];
  }

  if ( m_eSliceType != B_SLICE )
  {
    m_aiNumRefIdx[REF_PIC_LIST_1] = 0;
  }
  else
  {
    // Equation (8-11)
    for (Int rIdx = 0; rIdx < m_aiNumRefIdx[REF_PIC_LIST_1]; rIdx ++)
    {
      cIdx = m_RefPicListModification.getRefPicListModificationFlagL1() ? m_RefPicListModification.getRefPicSetIdxL1(rIdx) : rIdx % numPicTotalCurr;
      assert(cIdx >= 0 && cIdx < numPicTotalCurr);
      m_aiRefPOCList[REF_PIC_LIST_1][rIdx] = rpsPOCCurrList1[cIdx];
    }
  }

It is necessary to insert if clause. For example:

  if (getPPS()->getPpsScreenExtension().getUseIntraBlockCopy() &&
    !m_RefPicListModification.getRefPicListModificationFlagL0() && numPicTotalCurr > m_aiNumRefIdx[REF_PIC_LIST_0])
  {
    m_aiRefPOCList[REF_PIC_LIST_0][m_aiNumRefIdx[REF_PIC_LIST_0]-1] = getPOC();
  }

Attachments (1)

src17_randomacess_main_scc.hevc (164.1 KB) - added by Haruhiko 4 years ago.

Download all attachments as: .zip

Change History (5)

comment:1 follow-up: Changed 4 years ago by libin

Would you please provide a bitstream with wrong POC derivation at decoder side? It would be helpful for us to dig into this problem. Thanks!

Changed 4 years ago by Haruhiko

comment:2 in reply to: ↑ 1 Changed 4 years ago by Haruhiko

Replying to libin:

Would you please provide a bitstream with wrong POC derivation at decoder side? It would be helpful for us to dig into this problem. Thanks!

Bitstream attached. It encoded by HM16.15_SCM8.4 with encoder_randomaccess_main_scc.cfg + WeightedPredP = 1, WeightedPredB = 1.

comment:3 Changed 4 years ago by libin

Thanks Haruhiko. Your modification looks good to me. It seems that the bug only happens when weighted prediction is used. I will fix it soon.

comment:4 Changed 4 years ago by libin

  • Resolution set to fixed
  • Status changed from new to closed

fixed in r4886.

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

  • Bin Li(Participant)
  • Haruhiko Tanaka(Reporter, Participant)
  • jct-vc@…(Subscriber)
  • karl.sharman@…(Always)
  • Karsten Suehring(Always)