Opened 4 years ago

Closed 4 years ago

# Bug in affine fallback mode trigger (8.5.5.9)

Reported by: Owned by: chhuanb minor spec 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.

### comment:1 Changed 4 years ago by chhuanb

• Component changed from 360Lib to spec

### comment:2 follow-up: ↓ 3 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

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.