Opened 6 years ago
Closed 4 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 4 years ago by fbossen
- Resolution set to fixed
- Status changed from new to closed