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

Thanks for the report. Could you submit a merge request for the fix?

comment:2 Changed 6 years ago by ksuehring

  • Milestone set to VTM-5.1
  • Resolution set to fixed
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.