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 FilteringEdgeChromaHV (DeblockingFunc* pfDeblocking, SMB* pCurMb, SDeblockingFilter* pFilter) { int32_t iLineSize = pFilter->iCsStride[1]; int32_t iMbStride = pFilter->iMbStride; uint8_t* pDestCb, *pDestCr; int8_t iCurQp; int32_t iIdexA, iAlpha, iBeta; 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]; ENFORCE_STACK_ALIGN_1D (int8_t, iTc, 4, 16); ENFORCE_STACK_ALIGN_1D (uint8_t, uiBSx4, 4, 4); pDestCb = pFilter->pCsData[1]; pDestCr = pFilter->pCsData[2]; iCurQp = pCurMb->uiChromaQp; * (uint32_t*)uiBSx4 = 0x03030303; // chroma v if (iLeftFlag) { pFilter->uiChromaQP = (iCurQp + (pCurMb - 1)->uiChromaQp + 1) >> 1; FilteringEdgeChromaIntraV (pfDeblocking, pFilter, pDestCb, pDestCr, iLineSize, NULL); } pFilter->uiChromaQP = iCurQp; GET_ALPHA_BETA_FROM_QP (pFilter->uiChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIdexA, iAlpha, iBeta); if (iAlpha | iBeta) { TC0_TBL_LOOKUP (iTc, iIdexA, uiBSx4, 1); pfDeblocking->pfChromaDeblockingLT4Hor (&pDestCb[2 << 1], &pDestCr[2 << 1], iLineSize, iAlpha, iBeta, iTc); } // chroma h if (iTopFlag) { pFilter->uiChromaQP = (iCurQp + (pCurMb - iMbStride)->uiChromaQp + 1) >> 1; FilteringEdgeChromaIntraH (pfDeblocking, pFilter, pDestCb, pDestCr, iLineSize, NULL); } pFilter->uiChromaQP = iCurQp; if (iAlpha | iBeta) { pfDeblocking->pfChromaDeblockingLT4Ver (&pDestCb[ (2 << 1)*iLineSize], &pDestCr[ (2 << 1)*iLineSize], iLineSize, iAlpha, iBeta, iTc); } }
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]); } }