Opened 5 years ago

Closed 3 years ago

#208 closed defect (fixed)

Bug in DMVR when wrap around MC is enabled

Reported by: phanhart Owned by:
Priority: minor Milestone:
Component: VTM Version: VTM-4.0
Keywords: Cc: ksuehring, XiangLi, fbossen, jvet@…

Description

When running VTM-4.0 with DMVR and wrap around MC enabled, the following check in InterPrediction::xFinalPaddedMCForDMVR may be hit, causing the encoder to crash:

Mv cMv = pu.mv[refId];
...
clipMv(cMv, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps);

Mv startMv = mergeMV[refId];
clipMv(startMv, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps);

...

deltaIntMvX = (cMv.getHor() >> mvshiftTemp) - (startMv.getHor() >> mvshiftTemp);
deltaIntMvY = (cMv.getVer() >> mvshiftTemp) - (startMv.getVer() >> mvshiftTemp);

CHECK((abs(deltaIntMvX) > DMVR_NUM_ITERATION) | | (abs(deltaIntMvY) > DMVR_NUM_ITERATION), "not expected DMVR movement");

If wrap around MC is enabled, MV clipping may cause the wrapping of the PU MV. In this case, the difference (deltaIntMvX, deltaIntMvY) between the clipped PU MV and clipped start MV (i.e., clipped merge MV) is very large.
To solve this problem, deltaIntMvX and deltaIntMvY should be computed based on the un-clipped MVs instead of the clipped MVs.

A fix is proposed in merge request !340

The fix has no impact on the SDR CTC.

Change history (1)

comment:1 Changed 3 years ago by fbossen

  • Resolution set to fixed
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.