⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_vc1_smoothing.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                *(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 + -