Opened 8 years ago

Closed 8 years ago

#1182 closed defect (fixed)

Inconsistencies between spec and reference decoder for intra block copying

Reported by: peterderivaz Owned by:
Priority: major Milestone:
Component: RExt text Version: RExt D4 (N1005) v3
Keywords: Cc: davidf, joel, teruhiko, jct-vc@…


When intra_bc_flag is 1, the specification says that CuPredMode is MODE_INTRA.

However, the reference code sets the mode to MODE_INTRABC.

This causes some inconsistencies in residual_coding and other places.

For example, consider a coding unit using MODE_INTRABC.
Line 1311 of TDecSbac.cpp calls parseInterRdpcmMode, but the specification in will not read inter_rdpcm_flag.
This results in the arithmetic engine diverging.

I would appreciate clarification on the following points (where I think the specification and reference decoder mismatch):

  1. Is it correct for block copying intra modes to use MODE_INTRA in the specification?
  2. Is inter_rdpcm_flag read from the bitstream in block copying mode?
  3. Is predModeIntra defined for block copying mode? (It is used when calculating signHidden)
  4. Is the Intra or Inter ScalingList used in block copying mode?
  5. In the 8.4.2 derivation of luma inter prediction mode can the derivation of candIntraPredModeX use the value of IntraPredModeY for neighbours made from block copying intra?
  6. In the parsing of PartSize, should block copying mode be treated as Intra or Inter?

Change History (4)

comment:1 Changed 8 years ago by DefaultCC Plugin

  • Cc davidf joel teruhiko jct-vc@… added

comment:2 Changed 8 years ago by peterderivaz

Looking more carefully, I would like to delete point 6.
part_mode (PartSize in the reference decoder) is not present in the bitstream when intra_bc_flag is 1, and so PartMode defaults to PART_2Nx2N as specified in the semantics for part_mode.

comment:3 Changed 8 years ago by peterderivaz

With respect to point 3, I see that in it is explicitly said that predModeIntra is undefined when using block copying. I assume that this means that the comparisons in that check (predModeIntra == 10 || predModeIntra == 26 ) are expected to fail because we are comparing an undefined value with a defined value.

comment:4 Changed 8 years ago by davidf

  • Resolution set to fixed
  • Status changed from new to closed

In answer to your questions:

  • (1) It is correct for the specification to use MODE_INTRA for intraBC
  • (2) Issues regarding inter_rdpcm_flag have been fixed following adoptions in Geneve
  • (3) predModeIntra is defined to be undefined for intraBC
  • (4) Intra scaling list is used for intra block copy

Fixed in O1005v1:

  • (5) IntraBC blocks should not be available for derivation of candIntraPredModeX
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

  • David Flynn(Subscriber, Participant)
  • jct-vc@…(Subscriber)
  • Joel(Subscriber)
  • karl.sharman@…(Always)
  • Karsten Suehring(Always)
  • Peter de Rivaz(Reporter, Participant)
  • Teruhiko Suzuki(Subscriber)