Opened 4 weeks ago
#1646 new defect
[misalignment] condition to use of tempMV from sbtmvp candidate
Reported by: | hmjang | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | VTM | Version: | |
Keywords: | Cc: | ksuehring, XiangLi, fbossen, jvet@… |
Description
in the SPEC subclause 8.5.5.4,
tempMV from spatial A1 neighbor is used to adjust the position in colpic.
during this process, condition check is described as below
When availableFlagA1 is equal to TRUE, the following applies:
– If all of the following conditions are true, tempMv is set equal to mvL0A1:
– predFlagL0A1 is equal to 1,
– DiffPicOrderCnt( ColPic, RefPicList[ 0 ][ refIdxL0A1 ] ) is equal to 0,
– Otherwise, if all of the following conditions are true, tempMv is set equal to mvL1A1:
– sh_slice_type is equal to B,
– predFlagL1A1 is equal to 1,
– DiffPicOrderCnt( ColPic, RefPicList[ 1 ][ refIdxL1A1 ] ) is equal to 0.
but in the VTM, they check if the those pictures are physically same.
Therefore, in case of multilayer, we can imagine that current picture is layer 2, reference picture of A1 is Layer 1 and colpic is Layer 0 with same POC, tempMV is not used from the VTM but SPEC allow to use it.
def getInterMergeSubPuMvpCand(): if ((mrgCtx.interDirNeighbours[0] & (1 << REF_PIC_LIST_0)) && slice.getRefPic(REF_PIC_LIST_0, mrgCtx.mvFieldNeighbours[0][REF_PIC_LIST_0].refIdx) == pColPic) { cTMv = mrgCtx.mvFieldNeighbours[0][REF_PIC_LIST_0].mv; #if GDR_ENABLED if (isEncodeGdrClean) { isSubPuSolid[REF_PIC_LIST_0] = mrgCtx.mvSolid[0][REF_PIC_LIST_0]; } #endif } else if (slice.isInterB() && (mrgCtx.interDirNeighbours[0] & (1 << REF_PIC_LIST_1)) && slice.getRefPic(REF_PIC_LIST_1, mrgCtx.mvFieldNeighbours[0][REF_PIC_LIST_1].refIdx) == pColPic) { cTMv = mrgCtx.mvFieldNeighbours[0][REF_PIC_LIST_1].mv; #if GDR_ENABLED if (isEncodeGdrClean) { isSubPuSolid[REF_PIC_LIST_1] = mrgCtx.mvSolid[0][REF_PIC_LIST_1]; } #endif }