Opened 4 years ago

Closed 4 years ago

#851 closed defect (fixed)

Mismatch between spec and VTM on RplsIdx inference.

Reported by: audrey.turquin Owned by:
Priority: minor Milestone:
Component: VTM Version:
Keywords: Cc: ksuehring, XiangLi, fbossen, jvet@…

Description

It seems there is a mismatch between spec and VTM on the RplsIdx[1] inference in case of:

  • rpl1_idx_present_flag = 0
  • num_ref_pic_lists_in_sps[0] != 0
  • num_ref_pic_lists_in_sps[1] = 0
  • rpl_sps_flag[0] = 1

In this case, according to the spec, there are the following inferences for RPL1 :

  • rpl_sps_flag[1] = 0 (because num_ref_pic_lists_in_sps[1] = 0)
  • RplsIdx[1] = num_ref_pic_lists_in_sps[1] = 0

However, in the VTM, this inference is not done correctly (for both picture header and slice header).

In the parsing of the picture header (parsePictureHeader function), the first condition for the inference is:

if (listIdx == 1 && !pps->getRpl1IdxPresentFlag())
{
  picHeader->setRPL1idx(picHeader->getRPL0idx());
  uiCode = (picHeader->getRPL0idx() != -1);
}
// RPL in picture header or SPS
else if (sps->getNumRPL( listIdx ) == 0)
{
  ...
}

In the parsing of the slice header (parseSliceHeader function), the first condition for the inference is:

if (!pps->getRpl1IdxPresentFlag())
{
  pcSlice->setRPL1idx(pcSlice->getRPL0idx());
  if (pcSlice->getRPL1idx() != -1)
    pcSlice->setRPL1(sps->getRPLList1()->getReferencePictureList(pcSlice->getRPL0idx()));
}
else
{
  ...
}

Consequently, if rpl1_idx_present_flag = 0, RplsIdx[1] is set equal to RplsIdx[0], without taking into account the value of rpl_sps_flag[1].
So RplsIdx[1] is not set to the correct value, and cannot access to the correct RPL from SPS as it doesn't even exist (because num_of_ref_pic_lists_in_sps[1] = 0).

Moreover, in this case, in VTM the function 'parseRefPicList' is not called for L1 while it is the case in the spec (function 'ref_pic_list_struct').

Change history (3)

comment:1 Changed 4 years ago by audrey.turquin

comment:2 Changed 4 years ago by audrey.turquin

There is also an issue in the rpl_sps_flag[1] inference.
In the spec, there is a case where rpl_sps_flag[1] is inferred to be equal to rpl_sps_flag[0]. This case is not managed in the VTM.

comment:3 Changed 4 years ago by ksuehring

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

The MR was merged.

Note: See TracTickets for help on using tickets.