﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
1291	Mismatch between spec and software in BPSEI and PTSEI	kazui		"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;
 
 
 
  "	defect	closed	major	VTM-10.1	VTM	VTM-10.0rc1	fixed	BP SEI, PT SEI	ksuehring XiangLi fbossen jvet@…
