Ticket #840: slice_restriction.patch

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

     
    15651565      uiBoundingCUAddrSlice    = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU();
    15661566      break;
    15671567    }
    1568     // set the slice end address to the end of the SCU row if the slice does not start at the beginning of an SCU row
     1568    // WPP: if a slice does not start at the beginning of a CTB row, it must end within the same CTB row
    15691569    if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiStartCUAddrSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()) != 0))
    15701570    {
    1571       uiBoundingCUAddrSlice = uiStartCUAddrSlice - (uiStartCUAddrSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU())) + (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU());
     1571      uiBoundingCUAddrSlice = min(uiBoundingCUAddrSlice, uiStartCUAddrSlice - (uiStartCUAddrSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU())) + (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()));
    15721572    }
    15731573    pcSlice->setSliceCurEndCUAddr( uiBoundingCUAddrSlice );
    15741574  }
     
    16051605      uiBoundingCUAddrSlice    = uiNumberOfCUsInFrame*rpcPic->getNumPartInCU();
    16061606      break;
    16071607    }
    1608     // set the slice end address to the end of the SCU row if the slice does not start at the beginning of an SCU row
     1608    // WPP: if a slice does not start at the beginning of a CTB row, it must end within the same CTB row
    16091609    if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiStartCUAddrSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()) != 0))
    16101610    {
    1611       uiBoundingCUAddrSlice = uiStartCUAddrSlice - (uiStartCUAddrSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU())) + (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU());
     1611      uiBoundingCUAddrSlice = min(uiBoundingCUAddrSlice, uiStartCUAddrSlice - (uiStartCUAddrSlice % (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU())) + (rpcPic->getFrameWidthInCU()*rpcPic->getNumPartInCU()));
    16121612    }
    16131613    pcSlice->setSliceCurEndCUAddr( uiBoundingCUAddrSlice );
    16141614  }