Ticket #840: dependent_slice_restriction.patch

File dependent_slice_restriction.patch, 1.7 KB (added by bheng, 11 years ago)
  • source/Lib/TLibEncoder/TEncSlice.cpp

     
    16781678      uiBoundingCUAddrDependentSlice    = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU();
    16791679      break;
    16801680    }
     1681    // WPP: if a slice segment does not start at the beginning of a CTB row, it must end within the same CTB row
     1682    if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiStartCUAddrDependentSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()) != 0))
     1683    {
     1684      uiBoundingCUAddrDependentSlice = min(uiBoundingCUAddrDependentSlice, uiStartCUAddrDependentSlice - (uiStartCUAddrDependentSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU())) + (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()));
     1685    }
    16811686    pcSlice->setDependentSliceCurEndCUAddr( uiBoundingCUAddrDependentSlice );
    16821687  }
    16831688  else
     
    17141719      uiBoundingCUAddrDependentSlice    = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU();
    17151720      break;
    17161721    }
     1722    // WPP: if a slice segment does not start at the beginning of a CTB row, it must end within the same CTB row
     1723    if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiStartCUAddrDependentSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()) != 0))
     1724    {
     1725      uiBoundingCUAddrDependentSlice = min(uiBoundingCUAddrDependentSlice, uiStartCUAddrDependentSlice - (uiStartCUAddrDependentSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU())) + (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()));
     1726    }
    17171727    pcSlice->setDependentSliceCurEndCUAddr( uiBoundingCUAddrDependentSlice );
    17181728  }
    17191729  if(uiBoundingCUAddrDependentSlice>uiBoundingCUAddrSlice)