Opened 7 months ago

## #1619 new defect

# [Multilayer Profiles] Potential Mismatch of VTM22.0 & Specification Related To Derivation Process For Merge Motion Vector Difference

Reported by: | ksthey | Owned by: | |
---|---|---|---|

Priority: | minor | Milestone: | |

Component: | VTM | Version: | |

Keywords: | Multilayer | Cc: | ksuehring, XiangLi, fbossen, jvet@… |

### Description

In "8.5.2.7 Derivation process for merge motion vector difference", Equation 563:

mMvdL1[ 0 ] = Sign( currPocDiffL0 ) == Sign( currPocDiffL1 ) ? mMvdL0[ 0 ] : −mMvdL0[ 0 ].

The equivalent code is in VTM22.0, InterPrediction.cpp, MergeCtx::getMmvdDeltaMv(), starting from line 2478:

if ((poc1 - currPoc)*(poc0 - currPoc) > 0)

{

}

else

{

deltaMv[1].set(-1 * deltaMv[0].getHor(), -1 * deltaMv[0].getVer());

}

According to specification, definition of Sign(x):

Sign(x) = 1; x > 0

Sign(x) = 0; x == 0

Sign(x) = -1; x < 0

Let's assume:

Result of condition below in specification as r_spec: r_spec = Sign( currPocDiffL0 ) == Sign( currPocDiffL1 )

Result of condition below in VTM22.0 as r_vtm: r_vtm = ((poc1 - currPoc)*(poc0 - currPoc) > 0)

Use combination of currPoc, poc0 & poc1 below as inputs:

1.) currPoc: 1, poc0: 0, poc1: 0

r_spec = 1; r_vtm = 1;

2.) currPoc: 1, poc0: 0, poc1: 2

r_spec = 0; r_vtm = 0;

3.) currPoc: 1, poc0: 2, poc1: 0

r_spec = 0; r_vtm = 0;

4.) currPoc: 1, poc0: 2, poc1: 2

r_spec = 1; r_vtm = 1;

5.) currPoc: 1, poc0: 1, poc1: 0

r_spec = 1; r_vtm = 1;

6.) currPoc: 1, poc0: 0, poc1: 1

r_spec = 1; r_vtm = 1;

7.) currPoc: 1, poc0: 1, poc1: 1

r_spec = 1; r_vtm = 0;

Case 5, 6 & 7 are only possible in multilayer profiles (current picture and reference picture same POC, but different layers).

As shown above, for case 7, results of specification & VTM are different.

So, which is the correct one? specification or VTM?

**Note:**See TracTickets for help on using tickets.