Opened 5 years ago
Closed 5 years ago
#313 closed defect (fixed)
A bug of BDOF condition
Reported by: | chujoh | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | VTM-5.1 |
Component: | VTM | Version: | VTM-5.0 |
Keywords: | Cc: | ksuehring, XiangLi, fbossen, jvet@… |
Description
The define statements “JVET_N0146_DMVR_BDOF_CONDITION” and “JVET_N0266_SMALL_BLOCKS” should be included into “JVET_N0178_IMPLICIT_BDOF_SPLIT” on the function, motionCompensation() in InterPrediction.cpp.
There are the same codes in the function, xPredInterBi().
#if JVET_N0178_IMPLICIT_BDOF_SPLIT bool bioApplied = false; const Slice &slice = *pu.cs->slice; if (pu.cs->sps->getBDOFEnabledFlag()) { if (pu.cu->affine || m_subPuMC) { bioApplied = false; } else { const bool biocheck0 = !(pps.getWPBiPred() && slice.getSliceType() == B_SLICE); const bool biocheck1 = !(pps.getUseWP() && slice.getSliceType() == P_SLICE); if (biocheck0 && biocheck1 && PU::isBiPredFromDifferentDir(pu) && !(pu.Y().height == 4 || (pu.Y().width == 4 && pu.Y().height == 8)) ) { bioApplied = true; } } if (bioApplied && pu.cu->smvdMode) { bioApplied = false; } if (pu.cu->cs->sps->getUseGBi() && bioApplied && pu.cu->GBiIdx != GBI_DEFAULT) { bioApplied = false; } if (pu.mmvdEncOptMode == 2 && pu.mmvdMergeFlag) { bioApplied = false; } } bool dmvrApplied = false; dmvrApplied = (pu.mvRefine) && PU::checkDMVRCondition(pu); if ((pu.lumaSize().width > MAX_BDOF_APPLICATION_REGION || pu.lumaSize().height > MAX_BDOF_APPLICATION_REGION) && pu.mergeType != MRG_TYPE_SUBPU_ATMVP && (bioApplied && !dmvrApplied)) { xSubPuBio(pu, predBuf, eRefPicList); } else #endif
should be:
#if JVET_N0178_IMPLICIT_BDOF_SPLIT #if JVET_N0146_DMVR_BDOF_CONDITION WPScalingParam *wp0; WPScalingParam *wp1; int refIdx0 = pu.refIdx[REF_PIC_LIST_0]; int refIdx1 = pu.refIdx[REF_PIC_LIST_1]; pu.cs->slice->getWpScaling(REF_PIC_LIST_0, refIdx0, wp0); pu.cs->slice->getWpScaling(REF_PIC_LIST_1, refIdx1, wp1); #endif bool bioApplied = false; const Slice &slice = *pu.cs->slice; if (pu.cs->sps->getBDOFEnabledFlag()) { if (pu.cu->affine || m_subPuMC) { bioApplied = false; } else { #if JVET_N0146_DMVR_BDOF_CONDITION const bool biocheck0 = !((wp0[COMPONENT_Y].bPresentFlag || wp1[COMPONENT_Y].bPresentFlag) && slice.getSliceType() == B_SLICE); #else const bool biocheck0 = !(pps.getWPBiPred() && slice.getSliceType() == B_SLICE); #endif const bool biocheck1 = !(pps.getUseWP() && slice.getSliceType() == P_SLICE); if (biocheck0 && biocheck1 && PU::isBiPredFromDifferentDir(pu) #if JVET_N0266_SMALL_BLOCKS && pu.Y().height != 4 #else && !(pu.Y().height == 4 || (pu.Y().width == 4 && pu.Y().height == 8)) #endif ) { bioApplied = true; } } if (bioApplied && pu.cu->smvdMode) { bioApplied = false; } if (pu.cu->cs->sps->getUseGBi() && bioApplied && pu.cu->GBiIdx != GBI_DEFAULT) { bioApplied = false; } if (pu.mmvdEncOptMode == 2 && pu.mmvdMergeFlag) { bioApplied = false; } } bool dmvrApplied = false; dmvrApplied = (pu.mvRefine) && PU::checkDMVRCondition(pu); if ((pu.lumaSize().width > MAX_BDOF_APPLICATION_REGION || pu.lumaSize().height > MAX_BDOF_APPLICATION_REGION) && pu.mergeType != MRG_TYPE_SUBPU_ATMVP && (bioApplied && !dmvrApplied)) { xSubPuBio(pu, predBuf, eRefPicList); } else #endif
Change history (2)
comment:1 Changed 5 years ago by XiangLi
comment:2 Changed 5 years ago by ksuehring
- Milestone set to VTM-5.1
- Resolution set to fixed
- Status changed from new to closed
The fix was merged in MR600
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/merge_requests/600
Note: See TracTickets for help on using tickets.
Thanks for the report. Could you submit a merge request for the fix?