void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_t nBS[2][4][4], int32_t iBoundryFlag) { int32_t iMbXyIndex = pCurDqLayer->iMbXyIndex; int32_t iMbX = pCurDqLayer->iMbX; int32_t iMbY = pCurDqLayer->iMbY; int32_t iCurLumaQp = pCurDqLayer->pLumaQp[iMbXyIndex]; int32_t iCurChromaQp = pCurDqLayer->pChromaQp[iMbXyIndex]; int32_t iLineSize = pFilter->iCsStride[0]; int32_t iLineSizeUV = pFilter->iCsStride[1]; uint8_t* pDestY, * pDestCb, * pDestCr; pDestY = pFilter->pCsData[0] + ((iMbY * iLineSize + iMbX) << 4); pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSizeUV + iMbX) << 3); pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSizeUV + iMbX) << 3); if (iBoundryFlag & LEFT_FLAG_MASK) { int32_t iLeftXyIndex = iMbXyIndex - 1; pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iLeftXyIndex] + 1) >> 1; pFilter->iChromaQP = (iCurChromaQp + pCurDqLayer->pChromaQp[iLeftXyIndex] + 1) >> 1; if (nBS[0][0][0] == 0x04) { FilteringEdgeLumaIntraV (pFilter, pDestY, iLineSize, NULL); FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSizeUV, NULL); } else { if (* (uint32_t*)nBS[0][0] != 0) { FilteringEdgeLumaV (pFilter, pDestY, iLineSize, nBS[0][0]); FilteringEdgeChromaV (pFilter, pDestCb, pDestCr, iLineSizeUV, nBS[0][0]); } } }
void DeblockingInterMb (DeblockingFunc* pfDeblocking, SMB* pCurMb, SDeblockingFilter* pFilter, uint8_t uiBS[2][4][4]) { int8_t iCurLumaQp = pCurMb->uiLumaQp; int8_t iCurChromaQp = pCurMb->uiChromaQp; int32_t iLineSize = pFilter->iCsStride[0]; int32_t iLineSizeUV = pFilter->iCsStride[1]; int32_t iMbStride = pFilter->iMbStride; int32_t iMbX = pCurMb->iMbX; int32_t iMbY = pCurMb->iMbY; bool bLeftBsValid[2] = { (iMbX > 0), ((iMbX > 0) && (pCurMb->uiSliceIdc == (pCurMb - 1)->uiSliceIdc))}; bool bTopBsValid[2] = { (iMbY > 0), ((iMbY > 0) && (pCurMb->uiSliceIdc == (pCurMb - iMbStride)->uiSliceIdc))}; int32_t iLeftFlag = bLeftBsValid[pFilter->uiFilterIdc]; int32_t iTopFlag = bTopBsValid[pFilter->uiFilterIdc]; uint8_t* pDestY, *pDestCb, *pDestCr; pDestY = pFilter->pCsData[0]; pDestCb = pFilter->pCsData[1]; pDestCr = pFilter->pCsData[2]; if (iLeftFlag) { pFilter->uiLumaQP = (iCurLumaQp + (pCurMb - 1)->uiLumaQp + 1) >> 1; pFilter->uiChromaQP = (iCurChromaQp + (pCurMb - 1)->uiChromaQp + 1) >> 1; if (uiBS[0][0][0] == 0x04) { FilteringEdgeLumaIntraV (pfDeblocking, pFilter, pDestY, iLineSize , NULL); FilteringEdgeChromaIntraV (pfDeblocking, pFilter, pDestCb, pDestCr, iLineSizeUV, NULL); } else { if (* (uint32_t*)uiBS[0][0] != 0) { FilteringEdgeLumaV (pfDeblocking, pFilter, pDestY, iLineSize, uiBS[0][0]); FilteringEdgeChromaV (pfDeblocking, pFilter, pDestCb, pDestCr, iLineSizeUV, uiBS[0][0]); } } } pFilter->uiLumaQP = iCurLumaQp; pFilter->uiChromaQP = iCurChromaQp; if (* (uint32_t*)uiBS[0][1] != 0) { FilteringEdgeLumaV (pfDeblocking, pFilter, &pDestY[1 << 2], iLineSize, uiBS[0][1]); } if (* (uint32_t*)uiBS[0][2] != 0) { FilteringEdgeLumaV (pfDeblocking, pFilter, &pDestY[2 << 2], iLineSize, uiBS[0][2]); FilteringEdgeChromaV (pfDeblocking, pFilter, &pDestCb[2 << 1], &pDestCr[2 << 1], iLineSizeUV, uiBS[0][2]); } if (* (uint32_t*)uiBS[0][3] != 0) { FilteringEdgeLumaV (pfDeblocking, pFilter, &pDestY[3 << 2], iLineSize, uiBS[0][3]); } if (iTopFlag) { pFilter->uiLumaQP = (iCurLumaQp + (pCurMb - iMbStride)->uiLumaQp + 1) >> 1; pFilter->uiChromaQP = (iCurChromaQp + (pCurMb - iMbStride)->uiChromaQp + 1) >> 1; if (uiBS[1][0][0] == 0x04) { FilteringEdgeLumaIntraH (pfDeblocking, pFilter, pDestY, iLineSize , NULL); FilteringEdgeChromaIntraH (pfDeblocking, pFilter, pDestCb, pDestCr, iLineSizeUV, NULL); } else { if (* (uint32_t*)uiBS[1][0] != 0) { FilteringEdgeLumaH (pfDeblocking, pFilter, pDestY, iLineSize, uiBS[1][0]); FilteringEdgeChromaH (pfDeblocking, pFilter, pDestCb, pDestCr, iLineSizeUV, uiBS[1][0]); } } } pFilter->uiLumaQP = iCurLumaQp; pFilter->uiChromaQP = iCurChromaQp; if (* (uint32_t*)uiBS[1][1] != 0) { FilteringEdgeLumaH (pfDeblocking, pFilter, &pDestY[ (1 << 2)*iLineSize], iLineSize, uiBS[1][1]); } if (* (uint32_t*)uiBS[1][2] != 0) { FilteringEdgeLumaH (pfDeblocking, pFilter, &pDestY[ (2 << 2)*iLineSize], iLineSize, uiBS[1][2]); FilteringEdgeChromaH (pfDeblocking, pFilter, &pDestCb[ (2 << 1)*iLineSizeUV], &pDestCr[ (2 << 1)*iLineSizeUV], iLineSizeUV, uiBS[1][2]); } if (* (uint32_t*)uiBS[1][3] != 0) { FilteringEdgeLumaH (pfDeblocking, pFilter, &pDestY[ (3 << 2)*iLineSize], iLineSize, uiBS[1][3]); } }