Opened 4 months ago

Last modified 4 months ago

#1626 new defect

xParseSEIBufferingPeriod does not match spec, code omits some syntax elements

Reported by: peterderivaz Owned by:
Priority: major Milestone:
Component: VTM Version: VTM-23.0
Keywords: Cc: ksuehring, XiangLi, fbossen, jvet@…

Description

The code in source/Lib/DecoderLib/SEIRead.cpp reads:

void SEIReader::xParseSEIBufferingPeriod
...
  for (i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++)
  {
    for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ )
    {
      if( ( ( nalOrVcl == 0 ) && ( sei.m_bpNalCpbParamsPresentFlag ) ) ||
         ( ( nalOrVcl == 1 ) && ( sei.m_bpVclCpbParamsPresentFlag ) ) )
      {
        for( int j = 0; j < ( sei.m_bpCpbCnt ); j ++ )
        {
          sei_read_code( pDecodedMessageOutputStream, sei.m_initialCpbRemovalDelayLength, code, nalOrVcl ? "vcl_initial_cpb_removal_delay[i][j]" : "nal_initial_cpb_removal_delay[i][j]" );
          sei.m_initialCpbRemovalDelay[i][j][nalOrVcl] = code;
          sei_read_code( pDecodedMessageOutputStream, sei.m_initialCpbRemovalDelayLength, code, nalOrVcl ? "vcl_initial_cpb_removal_offset[i][j]" : "nal_initial_cpb_removal_offset[i][j]" );
          sei.m_initialCpbRemovalOffset[i][j][nalOrVcl] = code;
        }
      }
    }
  }

This corresponds to D.3.1 of the specification:

for( i = ( bp_sublayer_initial_cpb_removal_delay_present_flag ? 0 : bp_max_sublayers_minus1 ); i <= bp_max_sublayers_minus1; i++ ) {
  if( bp_nal_hrd_params_present_flag )
    for( j = 0; j < bp_cpb_cnt_minus1 + 1; j++ ) {
      bp_nal_initial_cpb_removal_delay[ i ][ j ] u(v)
      bp_nal_initial_cpb_removal_offset[ i ][ j ] u(v)
      if( bp_du_hrd_params_present_flag) {
        bp_nal_initial_alt_cpb_removal_delay[ i ][ j ] u(v)
        bp_nal_initial_alt_cpb_removal_offset[ i ][ j ] u(v)
      }
    }
  if( bp_vcl_hrd_params_present_flag )
    for( j = 0; j < bp_cpb_cnt_minus1 + 1; j++ ) {
      bp_vcl_initial_cpb_removal_delay[ i ][ j ] u(v)
      bp_vcl_initial_cpb_removal_offset[ i ][ j ] u(v)
      if( bp_du_hrd_params_present_flag ) {
        bp_vcl_initial_alt_cpb_removal_delay[ i ][ j ] u(v)
        bp_vcl_initial_alt_cpb_removal_offset[ i ][ j ] u(v)
      }
    }
}

The issue is that the VTM is missing code to parse the syntax elements bp_nal_initial_alt_cpb_removal_delay, bp_nal_initial_alt_cpb_removal_offset, bp_vcl_initial_alt_cpb_removal_delay, bp_vcl_initial_alt_cpb_removal_offset.

The encoder is also missing code to write these syntax elements.

(This bug is present in the latest VTM-23.0, but there does not seem to be an option in the Version dropdown for VTM-23.0.)

Change history (4)

comment:1 Changed 4 months ago by fbossen

  • Version set to VTM-23.0

comment:2 Changed 4 months ago by fbossen

Thank you for the report. Looks like these syntax elements were added in response to JVET-O0189 and should have been part of https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/merge_requests/967

comment:4 Changed 4 months ago by peterderivaz

Thanks for looking at this! I am happy for this issue to be marked as resolved when the suggested code changes are merged.

Note: See TracTickets for help on using tickets.