Opened 6 years ago
Closed 6 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 6 years ago by XiangLi
comment:2 Changed 6 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?