Opened 4 years ago

Closed 4 years ago

#1206 closed defect (fixed)

Bug in affine fallback mode trigger (8.5.5.9)

Reported by: chhuanb Owned by:
Priority: minor Milestone:
Component: spec Version:
Keywords: Cc: vzakharc, yuwenhe, jvet@…

Description

Affine fallback mode threshold is set depends on inter_pred_idc[ xCb ][ yCb ] as follow:

– If inter_pred_idc[ xCb ][ yCb ] is equal to PRED_BI and bxWX4 * bxHX4 is less than or equal to 225, fallbackModeTriggered is set equal to 0.
– Otherwise, if inter_pred_idc[ xCb ][ yCb ] is not equal to PRED_BI, both bxWXh * bxHXh is less than or equal to 165, and bxWXv * bxHXv is less than or equal to 165, fallbackModeTriggered is set equal to 0.

According to spec, inter_pred_idc[ xCb ][ yCb ] is inferred to PRED_L0 when not present. So for affine merge, this value cannnot be used to determine affine fallback mode.

Change history (5)

comment:1 Changed 4 years ago by chhuanb

  • Component changed from 360Lib to spec

comment:2 follow-up: Changed 4 years ago by fbossen

Indeed. predFlagLX[ 0 ][ 0 ] should probably be used instead of inter_pred_idc[ xCb ][ yCb ]. What is a bit unclear to me is whether predFlagL1[ 0 ][ 0 ] is defined when 8.5.5.9 is invoked for X=0.

In 8.5.5.1 we have
– Otherwise (merge_subblock_flag[ xCb ][ yCb ] is equal to 0), for X being replaced by either 0 or 1 in the variables predFlagLX, cpMvLX, MvdCpLX, and refIdxLX, in PRED_LX, and in the syntax element ref_idx_lX, the following ordered steps apply:

Not sure what this actually means. Do we apply each step for X=0 and X=1 before proceeding to the next step, or do we apply all steps for X=0 and then all steps for X=1?

comment:3 in reply to: ↑ 2 Changed 4 years ago by chhuanb

Replying to fbossen:

Indeed. predFlagLX[ 0 ][ 0 ] should probably be used instead of inter_pred_idc[ xCb ][ yCb ]. What is a bit unclear to me is whether predFlagL1[ 0 ][ 0 ] is defined when 8.5.5.9 is invoked for X=0.

In 8.5.5.1 we have
– Otherwise (merge_subblock_flag[ xCb ][ yCb ] is equal to 0), for X being replaced by either 0 or 1 in the variables predFlagLX, cpMvLX, MvdCpLX, and refIdxLX, in PRED_LX, and in the syntax element ref_idx_lX, the following ordered steps apply:

Not sure what this actually means. Do we apply each step for X=0 and X=1 before proceeding to the next step, or do we apply all steps for X=0 and then all steps for X=1?

I think we apply all steps for X=0 and then all step2 for X=1.
One possible solution to fix this issue is to derived the pred-directoin in 8.5.5.1 and 8.5.5.2, and use it as input when invoked 8.5.5.9.

comment:4 Changed 4 years ago by jlchen

Thanks to Huanbang and Frank for the discussion. Agree with the idea of Huanbang's solution to fix this. Basically go through the loop of X = 0..1 for parameter derivation, then invoke 8.5.5.9 with loop of x = 0..1.

comment:5 Changed 4 years ago by jlchen

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

The related changes will be included in JVET-S2001-vE release and sent to related experts for reviewing.

Note: See TracTickets for help on using tickets.