Opened 3 years ago

Closed 2 years 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 years 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 set to "true" instead.
Otherwise the if (skip) set it to "false" will be redundant.

Should this https://jvet.hhi.fraunhofer.de/trac/vvc/ticket/1517#no3simple change fixed the problem of mismatch between VVC spec and VTM?

Thanks
Sam.

Version 0, edited 3 years ago by swong10 (next)

comment:2 Changed 3 years 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 years ago by bbross

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