Opened 7 weeks ago

Closed 11 days ago

#1291 closed defect (fixed)

Mismatch between spec and software in BPSEI and PTSEI

Reported by: kazui Owned by:
Priority: major Milestone: VTM-10.1
Component: VTM Version: VTM-10.0rc1
Keywords: BP SEI, PT SEI Cc: ksuehring, XiangLi, fbossen, jvet@…

Description

This is a follow-up report of #1093 "Bugs in BPSEI and PTSEI".

Mismatch between the spec (Draft 10 version E) and software (VTM 10.0-rc1) still exists in BPSEI and PTSEI.

1) bp_cpb_cnt_minus1 in BPSEI

According to the spec, bp_cpb_cnt_minus1 is signalled before bp_sublayer_initial_cpb_removal_delay_present_flag. But the read operation of this SE disappears from SEIReader::xParseSEIBufferingPeriod() by enabling the macro JVET_S0181_PROPOSAL2_BUFFERING_PERIOD_CLEANUP.

It is suggested to insert the following code at line 766 in SEIread.cpp.

sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_cpb_cnt_minus1" ); sei.m_bpCpbCnt = code + 1;

2) Number of signalled pt_du_common_cpb_removal_delay_increment_minus1[ i ] and pt_du_cpb_removal_delay_increment_minus1[ i ][ j ]

According to the spec, the range of the index 'i' and 'j' for those two SEs is [TemporalId, bp_max_sublayers_minus1]. But those in the software is [TemporalId, bp_max_sublayers_minus1). I think the spec is correct since it handles the case "bp_max_sublayers_minus1 = 0".

It is suggested to apply the following changes.

In SEIread.cpp, line 1028

Replace "for( int i = temporalId; i < bp.m_bpMaxSubLayers - 1; i ++ ) " with "for( int i = temporalId; i <= bp.m_bpMaxSubLayers - 1; i ++ )"

In SEIread.cpp, line 1043

Replace "for( int j = temporalId; j < bp.m_bpMaxSubLayers - 1; j ++ ) " with "for( int j = temporalId; j <= bp.m_bpMaxSubLayers - 1; j ++ ) "


In SEIwrite.cpp, line 482

Replace "for( int i = temporalId; i < bp.m_bpMaxSubLayers - 1; i ++ )" with "for( int i = temporalId; i <= bp.m_bpMaxSubLayers - 1; i ++ )"


In SEIwrite.cpp, line 493

Replace "for( int j = temporalId; j < bp.m_bpMaxSubLayers - 1; j ++ )" with "for( int j = temporalId; j <= bp.m_bpMaxSubLayers - 1; j ++ )"



3) Value of pt_sublayer_delays_present_flag[ 0 ] when bp_max_sublayers_minus1 = 0

The following inference rule is found in the semantics of pt_sublayer_delays_present_flag[ i ].

The value of pt_sublayer_delays_present_flag[ bp_max_sublayers_minus1 ] is inferred to be equal to 1. When not present, the value of pt_sublayer_delays_present_flag[ i ] for any i in the range of 0 to bp_max_sublayers_minus1 − 1, inclusive, is infered inferred to be equal to 0.


According to the syntax table, pt_sublayer_delays_present_flag[ 0 ] is not signalled when bp_max_sublayers_minus1 is equal to 0. My understanding is that pt_sublayer_delays_present_flag[ i ] is inferred to be equal to 1 when i is equal to 0 and is inferred to be equal to 0 otherwise when bp_max_sublayers_minus1 is equal to 0. This is because that DU-related SEs should be explicitly signalled even when bp_max_sublayers_minus1 is equal to 0.

With my understanding, initialization of pt_sublayer_delays_present_flag[ 0 ] when bp_max_sublayers_minus1 is equal to 0 is missing in the software.

It is suggested to insert the following codes.

In EncGOP.cpp, line 827 (or in more appropriate place)

if( maxNumSubLayers == 1 )

{

pictureTimingSEI->m_ptSubLayerDelaysPresentFlag[0] = true;

}

In SEIread.cpp, line 874

if( bp.m_bpMaxSubLayers == 1 )

{

sei.m_ptSubLayerDelaysPresentFlag[ 0 ] = true;

}

4) Initialization of m_nuhLayerId in class Slice

m_nuhLayerId is not initialized and referred in the software.

It is suggested to initialize the member variable in Slice::initSlice() by inserting the following code.

In Slice.cpp, line 208

m_nuhLayerId = 0;





Change history (2)

comment:1 Changed 2 weeks ago by ksuehring

  • Milestone VTM-10.0 deleted
  • Version set to VTM-10.0rc1

comment:2 Changed 11 days ago by XiangLi

  • Milestone set to VTM-10.1
  • Resolution set to fixed
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.