Opened 3 months ago

Closed 2 weeks ago

#1517 closed defect (wontfix)

Potential Mismatch between VVC Spec and VTM Reference C Decoder Model

Reported by: swong10 Owned by:
Priority: critical Milestone:
Component: spec Version:
Keywords: cu_coded_flag, mismatch Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

cu_coded_flag in the VVC Spec :
When cu_coded_flag is not present, it is inferred as follows:
– If cu_skip_flag[ x0 ][ y0 ] is equal to 1 or pred_mode_plt_flag is equal to 1, cu_coded_flag is inferred to be equal to 0.
– Otherwise, cu_coded_flag is inferred to be equal to 1.

This flag is corresponding to cu.rootCbf in the VTM Decoder C Model. In the VVC Spec, if cu_coded_flag is not present, and if cu_skip_flag is set to 1, then cu_coded_flag is inferred to 0.
But in the VTM, as long as cu_skip_flag is present in the bitstream, the cu_coded_flag is set to 0, not just when cu_skip_flag is equal to 1.

Below is the VTM code segment that the cu_coded_flag is pre-set to 0 when cu_skip_flag is present in the bitstream. Is it a mismatch with the VVC spec.?

void CABACReader::cu_skip_flag( CodingUnit& cu )
{

RExtDECODER_DEBUG_BIT_STATISTICS_CREATE_SET( STATSCABAC_BITSSKIP_FLAG );

if ((cu.slice->isIntra()
cu.isConsIntra()) && cu.cs->slice->getSPS()->getIBCFlag())

{

cu.skip = false;
cu.rootCbf = false;
cu.predMode = MODE_INTRA;
cu.mmvdSkip = false;
if (cu.lwidth() < 128 && cu.lheight() < 128) disable IBC mode larger than 64x64
{
unsigned ctxId = DeriveCtx::CtxSkipFlag(cu);
unsigned skip = m_BinDecoder.decodeBin(Ctx::SkipFlag(ctxId));
DTRACE( g_trace_ctx, D_SYNTAX, "cu_skip_flag() ctx=%d skip=%d\n", ctxId, skip ? 1 : 0 );
if (skip)
{

cu.skip = true;
cu.rootCbf = false;
cu.predMode = MODE_IBC;
cu.mmvdSkip = false;

}
}
return;

Change history (3)

comment:1 Changed 3 months ago by swong10

We think there should be a typo in the C model code.
cu.skip = false;
cu.rootCbf = false;
* read the skip flag from the bitstream
if (skip)

cu.rootCbf = false;

The cu.rootCbf should be initially set to "true" instead.
Otherwise the if (skip) set it to "false" will be redundant.

Should this simple change fixed the problem of mismatch between VVC spec and VTM?

Thanks
Sam.

Last edited 3 months ago by swong10 (previous) (diff)

comment:2 Changed 3 months ago by fbossen

  • Version VTM-10.1 deleted

Sam: you shouldn't assume that there is always a 1-to-1 correspondence between variables in the spec and variables in the VTM.

The spec defines cu_coded_flag as:
cu_coded_flag equal to 1 specifies that the transform_tree( ) syntax structure is present for the current coding unit. cu_coded_flag equal to 0 specifies that the transform_tree( ) syntax structure is not present for the current coding unit.

The is no mismatch here unless you can show that the VTM parses elements of transform_tree() when it shouldn't, or that it doesn't parse elements of transform_tree() when it should.

There may be redundant/unnecessary operations in VTM, but that doesn't make it a "problem" or a "mismatch".

comment:3 Changed 2 weeks ago by bbross

  • Resolution set to wontfix
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.