Opened 3 years ago
Closed 3 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
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 3 years ago by bbross
- Resolution set to wontfix
- Status changed from new to closed
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)
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.