Opened 6 years ago

Closed 5 years ago

#112 closed defect (fixed)

output_layer_flag conformance restriction in MV-HEVC encoding

Reported by: Tomohiro Ikai Owned by: tech
Priority: major Component: HTM software
Version: HTM-15.1 Keywords:
Cc: tech, jct-3v@…

Description

In Multiview Main profile, there is the following conformance restiction.
"– When NumLayersInIdList[ OlsIdxToLsIdx[ olsIdx ] ] is equal to 2, output_layer_flag[ olsIdx ][ j ] derived according to any active VPS shall be equal to 1 for j in the range of 0 to 1, inclusive, for subBitstream."

In HTM encoding with the current cfg files, the restriction fails:

Solving this issue, we should remove the following two lines in cfg/MV-HEVC/baseCfg_2view.cfg
OutputLayerSetIdx : 1 # Indices of layer sets used to derive additional output layer sets
LayerIdsInAddOutputLayerSet_0 : 1 # Indices in VPS of output layers in additional output layer set 0

And we should replace the following lines in cfg/MV-HEVC/baseCfg_3view.cfg
OutputLayerSetIdx : 1 2 # Indices of layer sets used to derive additional output layer sets
LayerIdsInAddOutputLayerSet_0 : 1 # Indices in VPS of output layers in additional output layer set 0
LayerIdsInAddOutputLayerSet_1 : 2 # Indices in VPS of output layers in additional output layer set 1
with
OutputLayerSetIdx : 2 # Indices of layer sets used to derive additional output layer sets
LayerIdsInAddOutputLayerSet_1 : 2 # Indices in VPS of output layers in additional output layer set 1

Note: For 2 view case, I've conducted simulation with cfg change and confirmed the result but for 3 view case, I haven't conducted the simulation.

In addition, we may have the checks in decoder/encoder.

Decoder sides's check code may be as follows:

Void TDecCavlc::parseVPSExtension( TComVPS* pcVPS )
{

...
for( Int i = 1; i < pcVPS->getNumOutputLayerSets( ); i++ )
{

if( pcVPS->getNumLayerSets() > 2 && i >= pcVPS->getNumLayerSets( ) )
{

READ_CODE( pcVPS->getLayerSetIdxForOlsMinus1Len( i ), uiCode, "layer_set_idx_for_ols_minus1[i]" ); pcVPS->setLayerSetIdxForOlsMinus1( i, uiCode );

}
...
if( pcVPS->getNumOutputLayersInOutputLayerSet( i ) == 1 && pcVPS->getNumDirectRefLayers( pcVPS->getOlsHighestOutputLayerId( i ) ) > 0 )
{

READ_FLAG( uiCode, "alt_output_layer_flag[ i ]" ); pcVPS->setAltOutputLayerFlag( i, uiCode == 1 );

}

#if NH_MV_FIX_TICKET_XXX

if (pcVPS->getNumLayersInIdList( pcVPS->olsIdxToLsIdx( i ) ) == 2 && pcVPS->getPTL(pcVPS->getProfileTierLevelIdx(i, 1))->getGeneralPTL()->getProfileIdc() == Profile::MULTIVIEWMAIN)
{

for( Int j = 0; j < pcVPS->getNumLayersInIdList( pcVPS->olsIdxToLsIdx( i ) ); j++ )
{

if (pcVPS->getOutputLayerFlag(i, j) == 0)
{

printf("!!Warning!!, output_layer_flag[] shall be always 1 when two layer is used in OLS in MV-HEVC Main profile\n");

}

assert(pcVPS->getOutputLayerFlag(i, j));

}

}

#endif

}


Change history (1)

comment:1 Changed 5 years ago by tech

  • Resolution set to fixed
  • Status changed from new to closed
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

  • Gerhard Tech(Owner, Subscriber, Participant, Always)
  • jct-3v@…(Subscriber)
  • Karsten Suehring(Always)
  • Tomohiro Ikai(Reporter)