Opened 4 months ago

Last modified 4 weeks ago

#1630 new defect

Missing equations for applying AmvrShift

Reported by: peterderivaz Owned by:
Priority: minor Milestone: H.266/VVC v4
Component: spec Version: H.266/VVC v3
Keywords: Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

In the semantics for amvr_precision_idx, some motion vectors are adjusted as follows:

Otherwise (inter_affine_flag[ x0 ][ y0 ] is equal to 1), the variables
MvdCpL0[ x0 ][ y0 ][ 0 ][ 0 ], 
MvdCpL0[ x0 ][ y0 ][ 0 ][ 1 ], 
MvdCpL0[ x0 ][ y0 ][ 1 ][ 0 ], 
MvdCpL0[ x0 ][ y0 ][ 1 ][ 1 ], 
MvdCpL0[ x0 ][ y0 ][ 2 ][ 0 ] 
and MvdCpL0[ x0 ][ y0 ][ 2 ][ 1 ] are modified as follows:
MvdCpL0[ x0 ][ y0 ][ 0 ][ 0 ] = MvdCpL0[ x0 ][ y0 ][ 0 ][ 0 ] << AmvrShift (165)
MvdCpL1[ x0 ][ y0 ] [ 0 ][ 1 ] = MvdCpL1[ x0 ][ y0 ][ 0 ][ 1 ] << AmvrShift (166)
MvdCpL0[ x0 ][ y0 ][ 1 ][ 0 ] = MvdCpL0[ x0 ][ y0 ][ 1 ][ 0 ] << AmvrShift (167)
MvdCpL1[ x0 ][ y0 ] [ 1 ][ 1 ] = MvdCpL1[ x0 ][ y0 ][ 1 ][ 1 ] << AmvrShift (168)
MvdCpL0[ x0 ][ y0 ][ 2 ][ 0 ] = MvdCpL0[ x0 ][ y0 ][ 2 ][ 0 ] << AmvrShift (169)
MvdCpL1[ x0 ][ y0 ] [ 2 ][ 1 ] = MvdCpL1[ x0 ][ y0 ][ 2 ][ 1 ] << AmvrShift (170)

Note that the description says that 6 locations in the array MvdCpL0 are modified, while the equations modify 3 locations in the array MvdCpL0 and 3 locations in the array MvdCpL1.

I wonder if both the description and the equations are incomplete, and the correct thing to do is to modify the 6 locations in the array MvdCpL0 and also the same 6 locations in the array MvdCpL1?

Change history (1)

comment:1 Changed 4 weeks ago by bbross

  • Milestone set to H.266/VVC v4
  • Version set to H.266/VVC v3

Good catch, thanks! This is probably a copy/paste typo from the non-affine Mvd arrays above and should be fixed to:

Otherwise (inter_affine_flag[ x0 ][ y0 ] is equal to 1), the variables
MvdCpLX[ x0 ][ y0 ][ 0 ][ 0 ], 
MvdCpLX[ x0 ][ y0 ][ 0 ][ 1 ], 
MvdCpLX[ x0 ][ y0 ][ 1 ][ 0 ], 
MvdCpLX[ x0 ][ y0 ][ 1 ][ 1 ], 
MvdCpLX[ x0 ][ y0 ][ 2 ][ 0 ] 
and MvdCpLX[ x0 ][ y0 ][ 2 ][ 1 ], with X being equal to 0 or 1, are modified as follows:
MvdCpLX[ x0 ][ y0 ][ 0 ][ 0 ] = MvdCpLX[ x0 ][ y0 ][ 0 ][ 0 ] << AmvrShift (165)
MvdCpLX[ x0 ][ y0 ] [ 0 ][ 1 ] = MvdCpLX[ x0 ][ y0 ][ 0 ][ 1 ] << AmvrShift (166)
MvdCpLX[ x0 ][ y0 ][ 1 ][ 0 ] = MvdCpLX[ x0 ][ y0 ][ 1 ][ 0 ] << AmvrShift (167)
MvdCpLX[ x0 ][ y0 ] [ 1 ][ 1 ] = MvdCpLX[ x0 ][ y0 ][ 1 ][ 1 ] << AmvrShift (168)
MvdCpLX[ x0 ][ y0 ][ 2 ][ 0 ] = MvdCpLX[ x0 ][ y0 ][ 2 ][ 0 ] << AmvrShift (169)
MvdCpLX[ x0 ][ y0 ] [ 2 ][ 1 ] = MvdCpLX[ x0 ][ y0 ][ 2 ][ 1 ] << AmvrShift (170)
Note: See TracTickets for help on using tickets.