void FilteringEdgeLumaHV (DeblockingFunc* pfDeblocking, SMB* pCurMb, SDeblockingFilter* pFilter) { int32_t iLineSize = pFilter->iCsStride[0]; int32_t iMbStride = pFilter->iMbStride; uint8_t* pDestY; 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); pDestY = pFilter->pCsData[0]; iCurQp = pCurMb->uiLumaQp; * (uint32_t*)uiBSx4 = 0x03030303; // luma v if (iLeftFlag) { pFilter->uiLumaQP = (iCurQp + (pCurMb - 1)->uiLumaQp + 1) >> 1; FilteringEdgeLumaIntraV (pfDeblocking, pFilter, pDestY, iLineSize, NULL); } pFilter->uiLumaQP = iCurQp; GET_ALPHA_BETA_FROM_QP (pFilter->uiLumaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIdexA, iAlpha, iBeta); if (iAlpha | iBeta) { TC0_TBL_LOOKUP (iTc, iIdexA, uiBSx4, 0); pfDeblocking->pfLumaDeblockingLT4Hor (&pDestY[1 << 2], iLineSize, iAlpha, iBeta, iTc); pfDeblocking->pfLumaDeblockingLT4Hor (&pDestY[2 << 2], iLineSize, iAlpha, iBeta, iTc); pfDeblocking->pfLumaDeblockingLT4Hor (&pDestY[3 << 2], iLineSize, iAlpha, iBeta, iTc); } // luma h if (iTopFlag) { pFilter->uiLumaQP = (iCurQp + (pCurMb - iMbStride)->uiLumaQp + 1) >> 1; FilteringEdgeLumaIntraH (pfDeblocking, pFilter, pDestY, iLineSize, NULL); } pFilter->uiLumaQP = iCurQp; if (iAlpha | iBeta) { pfDeblocking->pfLumaDeblockingLT4Ver (&pDestY[ (1 << 2)*iLineSize], iLineSize, iAlpha, iBeta, iTc); pfDeblocking->pfLumaDeblockingLT4Ver (&pDestY[ (2 << 2)*iLineSize], iLineSize, iAlpha, iBeta, iTc); pfDeblocking->pfLumaDeblockingLT4Ver (&pDestY[ (3 << 2)*iLineSize], iLineSize, iAlpha, iBeta, iTc); } }
void FilteringEdgeLumaV (SDeblockingFilter* pFilter, uint8_t* pPix, int32_t iStride, uint8_t* pBS) { int32_t iIndexA; int32_t iAlpha; int32_t iBeta; ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16); GET_ALPHA_BETA_FROM_QP (pFilter->iLumaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha, iBeta); if (iAlpha | iBeta) { TC0_TBL_LOOKUP (tc, iIndexA, pBS, 0); pFilter->pLoopf->pfLumaDeblockingLT4Hor (pPix, iStride, iAlpha, iBeta, tc); } return; }
void FilteringEdgeChromaV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, uint8_t* pBS) { int32_t iIndexA; int32_t iAlpha; int32_t iBeta; ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16); if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) { GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha, iBeta); if (iAlpha | iBeta) { TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1); pFilter->pLoopf->pfChromaDeblockingLT4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc); } } else { for (int i = 0; i < 2; i++) { GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha, iBeta); if (iAlpha | iBeta) { uint8_t* pPixCbCr = (i == 0) ? pPixCb : pPixCr; TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1); pFilter->pLoopf->pfChromaDeblockingLT4Hor2 (pPixCbCr, iStride, iAlpha, iBeta, tc); } } } return; }
void FilteringEdgeChromaV (DeblockingFunc* pfDeblocking, SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, uint8_t* pBS) { int32_t iIdexA; int32_t iAlpha; int32_t iBeta; ENFORCE_STACK_ALIGN_1D (int8_t, iTc, 4, 16); GET_ALPHA_BETA_FROM_QP (pFilter->uiChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIdexA, iAlpha, iBeta); if (iAlpha | iBeta) { TC0_TBL_LOOKUP (iTc, iIdexA, pBS, 1); pfDeblocking->pfChromaDeblockingLT4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta, iTc); } return; }
void_t FilteringEdgeChromaH (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* pPixCr, int32_t iStride, uint8_t* pBS) { int32_t iIndexA; int32_t iAlpha; int32_t iBeta; FORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16); GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha, iBeta); if (iAlpha | iBeta) { TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1); pFilter->pLoopf->pfChromaDeblockingLT4Ver (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc); } return; }