#1347 closed defect (fixed)

Incorrect prediction sample offset when BDOF is disabled by DMVR

Reported by: bheng Owned by:
Priority: minor Milestone:
Component: spec Version: VVC D10 vE
Keywords: Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

In Section 8.5.6.1. when bdofFlag is TRUE, but sbBdofFlag is FALSE (because BDOF is disabled by dmvrSad), there is still an extra 1 pixel border around predSamplesLX even though BDOF will not be used.

When subclause 8.5.6.6 is called with predSamplesLX as inputs, this extra border is not accounted for. So, the prediction will be off by 1 pixel in each direction.

In this situation, the inputs for subclause 8.5.6.6 should be modified to remove the extra border by only passing values in the range x = 1..sbWidth and y = 1..sbHeight.

Change history (2)

comment:1 Changed 14 months ago by chhuanb

It is suggested to move the derivation of sbBdofFlag in clause 8.5.6.1 after equation 884 and use it as input of clasue 8.5.6.3, as follow:

For each subblock at subblock index ( xSbIdx, ySbIdx ) with xSbIdx = 0 .. numSbX − 1, and ySbIdx = 0 .. numSbY − 1, the following applies:
– The luma location ( xSb, ySb ) specifying the top-left sample of the current subblock relative to the top left luma sample of the current picture is derived as follows:
( xSb, ySb ) = ( xCb + xSbIdx * sbWidth, yCb + ySbIdx * sbHeight ) (884)
– The variable sbBdofFlag is set equal to FALSE.
– When bdofFlag is equal to TRUE, the variable sbBdofFlag is further modifed as follows:
– If dmvrFlag is equal to 1 and the variable dmvrSad[ xSbIdx ][ ySbIdx ] is less than ( 2 * sbWidth * sbHeight ), the variable sbBdofFlag is set equal to FALSE.
– Otherwise, the variable sbBdofFlag is set equal to TRUE.

– For X = 0..1, when predFlagLX[ xSbIdx ][ ySbIdx ] is equal to 1, the following applies:
– The reference picture consisting of an ordered two-dimensional array refPicLXL of luma samples and two ordered two-dimensional arrays refPicLXCb and refPicLXCr of chroma samples is derived by invoking the process specified in subclause 8.5.6.2 with X and refIdxLX as inputs.
– The motion vector offset mvOffset is set equal to refMvLX[ xSbIdx ][ xSbIdx ] − mvLX[ xSbIdx ][ ySbIdx ].
– If cIdx is equal to 0, the following applies:
– The array predSamplesLXL is derived by invoking the fractional sample interpolation process specified in subclause 8.5.6.3 with the luma location ( xSb, ySb ), the subblock width sbWidth, the subblock height sbHeight in luma samples, the luma motion vector offset mvOffset, the refined luma motion vector refMvLX[ xSbIdx ][ xSbIdx ], the reference array refPicLXL, sbBdofFlagbdofFlag, cbProfFlagLX, dmvrFlag, hpelIfIdx, cIdx, RprConstraintsActiveFlag[ X ][ refIdxLX ], and RefPicScale[ X ][ refIdxLX ] as inputs.

comment:2 Changed 14 months ago by bbross

  • Resolution set to fixed
  • Status changed from new to closed

Thanks for bringing that up Brian and Huanbang for suggesting the fix.

The other two invocations of 8.5.6.3 for cIdx=1 and 2 still use bdofFlag, which should be OK since both sbBdofFlag and bdofFlag are both equal to FALSE in that case.

This will be fixed in JVET-S2001-vH with one small change:
"– The array predSamplesLXL is derived by invoking the fractional sample interpolation process specified in subclause 8.5.6.3 with the luma location ( xSb, ySb ), the subblock width sbWidth, the subblock height sbHeight in luma samples, the luma motion vector offset mvOffset, the refined luma motion vector refMvLX[ xSbIdx ][ xSbIdx ], the reference array refPicLXL, the variable bdofFlag set equal to sbBdofFlag, cbProfFlagLX, dmvrFlag, hpelIfIdx, cIdx, RprConstraintsActiveFlag[ X ][ refIdxLX ], and RefPicScale[ X ][ refIdxLX ] as inputs."

Note: See TracTickets for help on using tickets.