本文考察Boundary Strength (BS)的获取过程:
Void TComLoopFilter::xGetBoundaryStrengthSingle ( TComDataCU* pcCU, UInt uiAbsZorderIdx, Int iDir, UInt uiAbsPartIdx )
{
TComSlice* const pcSlice = pcCU->getSlice();
const UInt uiPartQ = uiAbsPartIdx; //!< 当前CU的地址
TComDataCU* const pcCUQ = pcCU; //!< 当前CU的指针
UInt uiPartP;
TComDataCU* pcCUP;
UInt uiBs = 0;
//-- Calculate Block Index
if (iDir == EDGE_VER) //!< 垂直边界滤波,获取左邻CU
{
pcCUP = pcCUQ->getPULeft(uiPartP, uiPartQ, !pcCU->getSlice()->getLFCrossSliceBoundaryFlag(), false, !m_bLFCrossTileBoundary);
}
else // (iDir == EDGE_HOR) //!< 水平边界滤波,获取上邻CU
{
#if LINEBUF_CLEANUP
pcCUP = pcCUQ->getPUAbove(uiPartP, uiPartQ, !pcCU->getSlice()->getLFCrossSliceBoundaryFlag(), false, false, !m_bLFCrossTileBoundary);
#else
pcCUP = pcCUQ