📄 umc_vc1_smoothing.cpp
字号:
*(pSrcR+1) = x3 + ((-f0 + r1)>>3);
*(dst-2)=(Ipp8u)VC1_CLIP(*(pSrcL));
*(dst-1)=(Ipp8u)VC1_CLIP(*(pSrcL+1));
*(dst+0)=(Ipp8u)VC1_CLIP(*(pSrcR));
*(dst+1)=(Ipp8u)VC1_CLIP(*(pSrcR+1));
pSrcL -= 7*srcLeftStep;
pSrcR += srcRightStep;
r0 = 7 - r0;
r1 = 7 - r1;
dst+=dstStep;
}
}
break;
case 3:
{
//both blocks are field
r0 = 4; r1 = 3;
for(i=0;i<VC1_PIXEL_IN_BLOCK;i++)
{
x0 = *(pSrcL);
x1 = *(pSrcL + 1);
x2 = *(pSrcR );
x3 = *(pSrcR + 1);
f0 = x3 - x0;
f1 = x2 + x3 - x0 - x1;
*(pSrcL) = x0 + ((f0 + r0)>>3);
*(pSrcL + 1) = x1 + ((f1 + r1)>>3);
*(pSrcR ) = x2 + ((-f1 + r0)>>3);
*(pSrcR+1) = x3 + ((-f0 + r1)>>3);
*(dst-2)=(Ipp8u)VC1_CLIP(*(pSrcL));
*(dst-1)=(Ipp8u)VC1_CLIP(*(pSrcL+1));
*(dst+0)=(Ipp8u)VC1_CLIP(*(pSrcR));
*(dst+1)=(Ipp8u)VC1_CLIP(*(pSrcR+1));
pSrcL += srcLeftStep;
pSrcR += srcRightStep;
dst+=2*dstStep;
}
r0 = 3; r1 = 4;
pSrcL = pSrcLeft + VC1_PIXEL_IN_BLOCK*srcLeftStep;
pSrcR = pSrcRight +VC1_PIXEL_IN_BLOCK*srcRightStep;
dst = pDst + dstStep;
for(i=0; i < VC1_PIXEL_IN_BLOCK; i++)
{
x0 = *(pSrcL);
x1 = *(pSrcL + 1);
x2 = *(pSrcR );
x3 = *(pSrcR + 1);
f0 = x3 - x0;
f1 = x2 + x3 - x0 - x1;
*(pSrcL) = x0 + ((f0 + r0)>>3);
*(pSrcL + 1) = x1 + ((f1 + r1)>>3);
*(pSrcR ) = x2 + ((-f1 + r0)>>3);
*(pSrcR+1) = x3 + ((-f0 + r1)>>3);
*(dst-2)=(Ipp8u)VC1_CLIP(*(pSrcL));
*(dst-1)=(Ipp8u)VC1_CLIP(*(pSrcL+1));
*(dst+0)=(Ipp8u)VC1_CLIP(*(pSrcR));
*(dst+1)=(Ipp8u)VC1_CLIP(*(pSrcR+1));
pSrcL += srcLeftStep;
pSrcR += srcRightStep;
dst+=2*dstStep;
}
}
break;
}
return ippStsNoErr;
}
IppStatus _own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R (Ipp16s* pSrcUpper, Ipp32s srcUpperStep,
Ipp16s* pSrcBottom, Ipp32s srcBottomStep,
Ipp8u* pDst, Ipp32s dstStep,
Ipp32u edgeDisableFlag)
{
Ipp32s i;
Ipp8s r0=4, r1=3;
Ipp16s *pSrcU = pSrcUpper;
Ipp16s *pSrcB = pSrcBottom;
Ipp8u *dst = pDst;
Ipp16s x0,x1,x2,x3;
Ipp16s f0, f1;
srcUpperStep/=2;
srcBottomStep/=2;
if(edgeDisableFlag & IPPVC_EDGE_HALF_1)
for(i=0;i<VC1_PIXEL_IN_BLOCK;i++)
{
x0 = *(pSrcU);
x1 = *(pSrcU+srcUpperStep);
x2 = *(pSrcB);
x3 = *(pSrcB+srcBottomStep);
f0 = x3 - x0;
f1 = x2 + x3 - x0 - x1;
//*(pSrcU ) = ((7 * x0 + 0 * x1 + 0 * x2 + 1 * x3) + r0)>>3;
//*(pSrcU + srcUpperStep) = ((-1* x0 + 7 * x1 + 1 * x2 + 1 * x3) + r1)>>3;
//*(pSrcB ) = ((1 * x0 + 1 * x1 + 7 * x2 + -1* x3) + r0)>>3;
//*(pSrcB + srcBottomStep) = ((1 * x0 + 0 * x1 + 0 * x2 + 7 * x3) + r1)>>3;
*(dst-2*dstStep)= (Ipp8u)VC1_CLIP(x0 + ((f0 + r0)>>3));
*(dst-1*dstStep)= (Ipp8u)VC1_CLIP(x1 + ((f1 + r1)>>3));
*(dst+0*dstStep)= (Ipp8u)VC1_CLIP(x2 + ((-f1 + r0)>>3));
*(dst+1*dstStep)= (Ipp8u)VC1_CLIP(x3 + ((-f0 + r1)>>3));
dst++;
pSrcU++;
pSrcB++;
r0 = 7 - r0;
r1 = 7 - r1;
}
pSrcU = pSrcUpper + VC1_PIXEL_IN_BLOCK;
pSrcB = pSrcBottom + VC1_PIXEL_IN_BLOCK;
dst = pDst + 8;
if(edgeDisableFlag & IPPVC_EDGE_HALF_2)
for(i=0;i<VC1_PIXEL_IN_BLOCK;i++)
{
x0 = *(pSrcU);
x1 = *(pSrcU+srcUpperStep);
x2 = *(pSrcB);
x3 = *(pSrcB+srcBottomStep);
f0 = x3 - x0;
f1 = x2 + x3 - x0 - x1;
//*(pSrcU ) = ((7 * x0 + 0 * x1 + 0 * x2 + 1 * x3) + r0)>>3;
//*(pSrcU + srcUpperStep) = ((-1* x0 + 7 * x1 + 1 * x2 + 1 * x3) + r1)>>3;
//*(pSrcB ) = ((1 * x0 + 1 * x1 + 7 * x2 + -1* x3) + r0)>>3;
//*(pSrcB + srcBottomStep) = ((1 * x0 + 0 * x1 + 0 * x2 + 7 * x3) + r1)>>3;
*(dst-2*dstStep)= (Ipp8u)VC1_CLIP(x0 + ((f0 + r0)>>3));
*(dst-1*dstStep)= (Ipp8u)VC1_CLIP(x1 + ((f1 + r1)>>3));
*(dst+0*dstStep)= (Ipp8u)VC1_CLIP(x2 + ((-f1 + r0)>>3));
*(dst+1*dstStep)= (Ipp8u)VC1_CLIP(x3 + ((-f0 + r1)>>3));
dst++;
pSrcU++;
pSrcB++;
r0 = 7 - r0;
r1 = 7 - r1;
}
return ippStsNoErr;
}
IppStatus _own_ippiSmoothingChroma_HorEdge_VC1_16s8u_C1R (Ipp16s* pSrcUpper, Ipp32s srcUpperStep,
Ipp16s* pSrcBottom, Ipp32s srcBottomStep,
Ipp8u* pDst, Ipp32s dstStep)
{
Ipp32s i;
Ipp8s r0=4, r1=3;
Ipp16s *pSrcU = pSrcUpper;
Ipp16s *pSrcB = pSrcBottom;
Ipp8u *dst = pDst;
Ipp16s x0,x1,x2,x3;
Ipp16s f0, f1;
srcUpperStep/=2;
srcBottomStep/=2;
for(i=0;i<VC1_PIXEL_IN_BLOCK;i++)
{
x0 = *(pSrcU);
x1 = *(pSrcU+srcUpperStep);
x2 = *(pSrcB);
x3 = *(pSrcB+srcBottomStep);
f0 = x3 - x0;
f1 = x2 + x3 - x0 - x1;
//*(pSrcU ) = x0 + (f0 + r0)>>3;
//*(pSrcU + srcUpperStep) = x1 + (f1 + r1)>>3;
//*(pSrcB ) = x2 + (-f1 + r0)>>3;
//*(pSrcB + srcBottomStep)= x3 + (-f0 + r1)>>3;
*(dst-2*dstStep)= (Ipp8u)VC1_CLIP(x0 + ((f0 + r0)>>3));
*(dst-1*dstStep)= (Ipp8u)VC1_CLIP(x1 + ((f1 + r1)>>3));
*(dst+0*dstStep)= (Ipp8u)VC1_CLIP(x2 + ((-f1 + r0)>>3));
*(dst+1*dstStep)= (Ipp8u)VC1_CLIP(x3 + ((-f0 + r1)>>3));
dst++;
pSrcU++;
pSrcB++;
r0 = 7 - r0;
r1 = 7 - r1;
}
return ippStsNoErr;
}
IppStatus _own_ippiSmoothingChroma_VerEdge_VC1_16s8u_C1R (Ipp16s* pSrcLeft, Ipp32s srcLeftStep,
Ipp16s* pSrcRight, Ipp32s srcRightStep,
Ipp8u* pDst, Ipp32s dstStep)
{
Ipp32s i;
Ipp8s r0, r1;
Ipp16s x0,x1,x2,x3;
Ipp16s f0, f1;
r0 = 4; r1 = 3;
srcLeftStep/=2;
srcRightStep/=2;
for(i=0;i<VC1_PIXEL_IN_BLOCK;i++)
{
x0 = *(pSrcLeft);
x1 = *(pSrcLeft + 1);
x2 = *(pSrcRight );
x3 = *(pSrcRight + 1);
f0 = x3 - x0;
f1 = x2 + x3 - x0 - x1;
*(pSrcLeft) = x0 + ((f0 + r0)>>3);
*(pSrcLeft + 1) = x1 + ((f1 + r1)>>3);
*(pSrcRight ) = x2 + ((-f1 + r0)>>3);
*(pSrcRight+1) = x3 + ((-f0 + r1)>>3);
*(pDst-2)=(Ipp8u)VC1_CLIP(*(pSrcLeft));
*(pDst-1)=(Ipp8u)VC1_CLIP(*(pSrcLeft+1));
*(pDst+0)=(Ipp8u)VC1_CLIP(*(pSrcRight));
*(pDst+1)=(Ipp8u)VC1_CLIP(*(pSrcRight+1));
r0 = 7 - r0;
r1 = 7 - r1;
pSrcLeft += srcLeftStep;
pSrcRight += srcRightStep;
pDst+=dstStep;
}
return ippStsNoErr;
}
#endif
void Smoothing_I(VC1Context* pContext, Ipp32s Height)
{
VC1MB* pCurrMB = pContext->m_pCurrMB;
if(pCurrMB->Overlap == 0)
return;
{
VC1MB* pCurrMB = pContext->m_pCurrMB;
Ipp32s notTop = VC1_IS_NO_TOP_MB(pCurrMB->LeftTopRightPositionFlag);
Ipp32s Width = pContext->m_seqLayerHeader->widthMB;
Ipp32u EdgeDisabledFlag = IPPVC_EDGE_HALF_1 | IPPVC_EDGE_HALF_2;
Ipp16s* CurrBlock = pContext->m_pBlock;
Ipp8u* YPlane = pCurrMB->currYPlane;
Ipp8u* UPlane = pCurrMB->currUPlane;
Ipp8u* VPlane = pCurrMB->currVPlane;
Ipp32s YPitch = pCurrMB->currYPitch;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -