Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#673 closed defect (fixed)

cabac_init_flag determination broken for entropy slices

Reported by: pieterkapsenberg Owned by:
Priority: minor Milestone: HM-8.1
Component: HM Version: HM-8.0
Keywords: Cc: fbossen, ksuehring, davidf, jct-vc@…

Description

If currently in a dependent slice, and the slice it depends on has mvd_l1_zero_flag = 1, getSlice()->getMvdL1ZeroFlag() does not return the correct value.
Specifically, this affects the parsing process here: TDecSbac::parseMvd, line 850:

  if(pcCU->getSlice()->getMvdL1ZeroFlag() && eRefList == REF_PIC_LIST_1 && pcCU->getInterDir(uiAbsPartIdx)==3)

Attachments (2)

RaceHorses_lowdelay_dep_slices_cabac_reset.bin (32.9 KB) - added by ksuehring 9 years ago.
depslices_cabac_reset.cfg (7.8 KB) - added by ksuehring 9 years ago.

Download all attachments as: .zip

Change History (11)

comment:1 Changed 9 years ago by DefaultCC Plugin

  • Cc fbossen ksuehring davidf jct-vc@… added

comment:2 Changed 9 years ago by ksuehring

The config file in #671 uses

CabacIndependentFlag : 1

which actually makes that an entropy slice, not a dependent slice.

I'm going to attach the files from #671 also to this bug, that people can find them.

Changed 9 years ago by ksuehring

Changed 9 years ago by ksuehring

comment:3 Changed 9 years ago by ksuehring

With "CabacIndependentFlag : 0" I indeed don't see a mismatch anymore.

comment:4 Changed 9 years ago by ksuehring

getSlice()->getMvdL1ZeroFlag() seems to be in sync at least for the writing function at the encoder and when reading it at the decoder.

One more finding: when I set

DependentSliceMode : 1
DependentSliceArgument : 15
CabacIndependentFlag : 1

for the larger version of RaceHorses, the decoder completely crashes. So it seems there is something broken in the CABAC parsing process.

comment:5 Changed 9 years ago by suzukiyos

The encoder-decoder mismatches are caused, even if mvd_l1_zero_flag=0 (manually) and the following sets.

DependentSliceMode : 1
DependentSliceArgument : 15
CabacIndependentFlag : 1

for the smaller version of RaceHorses.

When CabacIndependentFlag=0, no mismatches are found.

comment:6 Changed 9 years ago by AHenkel

The encoder-decoder mismatches are caused (if CabacIndependentFlag is 1),because of CabacInitFlag . If #define CABAC_INIT_PRESENT_FLAG 0, no mimatch occurs.Or in the case of EntropySlices , cabacInitFlag has to be signaled in SliceHeader.

comment:7 Changed 9 years ago by ksuehring

The program flow for cabac_init_idc is the following:

  • the slice header is written
  • when the slice content is written, a new value of cabac_init_flag is determined (determineCabacInitIdx())
  • the new value is used in the next slice (not the current one)

If the next slice does not have a full slice header, the inferred value from first slice header does not match the new value that has been used a the encoder.

My suggested work-around would be to disable determineCabacInitIdx() whenever dependent slices are enabled. If this is not satisfactory, please provide a better fix.

comment:8 Changed 9 years ago by ksuehring

  • Resolution set to fixed
  • Status changed from new to closed
  • Summary changed from mvd_l1_zero_flag is not transferred to dependent slices to cabc_init_flag determination broken for entropy slices

The work-around has been committed in r2724

comment:9 Changed 9 years ago by ksuehring

  • Summary changed from cabc_init_flag determination broken for entropy slices to cabac_init_flag determination broken for entropy slices
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

  • Anastasia Henkel(Participant)
  • David Flynn(Subscriber)
  • Frank Bossen(Subscriber)
  • jct-vc@…(Subscriber)
  • karl.sharman@…(Always)
  • Karsten Suehring(Subscriber, Participant, Always)
  • Pieter Kapsenberg(Reporter)
  • Yoshinori Suzuki(Participant)