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

📄 umc_vc1_enc_common.h

📁 audio-video-codecs.rar语音编解码器
💻 H
📖 第 1 页 / 共 3 页
字号:
IPP_STAT_START_TIME(m_IppStat->IppStartTime);
        switch (TransformType)
        {
            case VC1_ENC_8x8_TRANSFORM:
                Sts = _own_ippiTransformBlock8x8Fwd_VC1_16s_C1R(pSrcDst, srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform(pSrcDst, srcDstStep, doubleQuant, roiSize);
                break;
            case VC1_ENC_4x8_TRANSFORM:
                roiSize.width  = 4;
                roiSize.height = 8;

                Sts = _own_ippiTransformBlock4x8Fwd_VC1_16s_C1R(pSrcDst,srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform(pSrcDst, srcDstStep, doubleQuant, roiSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts =  _own_ippiTransformBlock4x8Fwd_VC1_16s_C1R(pSrcDst+4,srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform(pSrcDst + 4, srcDstStep, doubleQuant, roiSize);

                break;
            case VC1_ENC_8x4_TRANSFORM:
                roiSize.width  = 8;
                roiSize.height = 4;

                Sts = _own_ippiTransformBlock8x4Fwd_VC1_16s_C1R(pSrcDst,srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform(pSrcDst, srcDstStep, doubleQuant, roiSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiTransformBlock8x4Fwd_VC1_16s_C1R((Ipp16s*)((Ipp8u*)pSrcDst+4*srcDstStep),
                                                                                            srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform((Ipp16s*)((Ipp8u*)pSrcDst+4*srcDstStep),
                                                                        srcDstStep, doubleQuant, roiSize);
                break;
            case VC1_ENC_4x4_TRANSFORM:
                roiSize.height = 4;
                roiSize.width  = 4;

                Sts = _own_ippiTransformBlock4x4Fwd_VC1_16s_C1R(pSrcDst,srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform(pSrcDst, srcDstStep, doubleQuant, roiSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiTransformBlock4x4Fwd_VC1_16s_C1R(pSrcDst + 4,srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform(pSrcDst + 4, srcDstStep, doubleQuant, roiSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiTransformBlock4x4Fwd_VC1_16s_C1R((Ipp16s*)((Ipp8u*)pSrcDst+4*srcDstStep),
                                                                                             srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform((Ipp16s*)((Ipp8u*)pSrcDst+4*srcDstStep), srcDstStep,
                                                                                    doubleQuant, roiSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiTransformBlock4x4Fwd_VC1_16s_C1R((Ipp16s*)((Ipp8u*)pSrcDst+4*srcDstStep)+4,
                                                                                               srcDstStep);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = _own_ippiQuantInterNonUniform((Ipp16s*)((Ipp8u*)pSrcDst+4*srcDstStep)+4, srcDstStep, doubleQuant, roiSize);
                break;
            default:
                return ippStsErr;
                break;
        }
IPP_STAT_END_TIME(m_IppStat->IppStartTime, m_IppStat->IppEndTime, m_IppStat->IppTotalTime);

        return Sts;
    }

    typedef IppStatus (*IntraTransformQuantFunction)  (Ipp16s* pSrcDst, Ipp32s srcDstStep,
                                                       Ipp32s DCQuant, Ipp32s doubleQuant);
    typedef IppStatus (*InterTransformQuantFunction)  (Ipp16s* pSrcDst, Ipp32s srcDstStep,
                                                       Ipp32s TransformType, Ipp32s doubleQuant);

 //-------------INVERSE-TRANSFORM-QUANTIZATION---------------------------

#ifndef _VC1_ENC_OWN_FUNCTIONS_
    #define _own_ippiQuantInvIntraUniform_VC1_16s_C1IR     ippiQuantInvIntraUniform_VC1_16s_C1R
    #define _own_ippiQuantInvIntraNonUniform_VC1_16s_C1IR  ippiQuantInvIntraNonuniform_VC1_16s_C1R
    #define _own_ippiQuantInvInterUniform_VC1_16s_C1IR     ippiQuantInvInterUniform_VC1_16s_C1R
    #define _own_ippiQuantInvInterNonUniform_VC1_16s_C1IR  ippiQuantInvInterNonuniform_VC1_16s_C1R
#endif // not _VC1_ENC_OWN_FUNCTIONS_

    inline IppStatus IntraInvTransformQuantUniform(Ipp16s* pSrc, Ipp32s srcStep,
                                                   Ipp16s* pDst, Ipp32s dstStep,
                                                   Ipp32s DCQuant, Ipp32s doubleQuant)
    {
        IppStatus Sts = ippStsNoErr;
        IppiSize DstSize = {8, 8};

IPP_STAT_START_TIME(m_IppStat->IppStartTime);
        Sts = _own_ippiQuantInvIntraUniform_VC1_16s_C1IR(pSrc, srcStep, pDst, dstStep,
                                                                doubleQuant, &DstSize);
        pDst[0] = pSrc[0]*DCQuant;
        VC1_ENC_IPP_CHECK(Sts);
        Sts = ippiTransform8x8Inv_VC1_16s_C1IR(pDst,dstStep,DstSize);
IPP_STAT_END_TIME(m_IppStat->IppStartTime, m_IppStat->IppEndTime, m_IppStat->IppTotalTime);

         return Sts;
    }

    inline IppStatus IntraInvTransformQuantNonUniform(Ipp16s* pSrc, Ipp32s srcStep,
                                                      Ipp16s* pDst, Ipp32s dstStep,
                                                      Ipp32s DCQuant, Ipp32s doubleQuant)
    {
        IppStatus Sts = ippStsNoErr;
        IppiSize DstSize = {8, 8};

IPP_STAT_START_TIME(m_IppStat->IppStartTime);
        Sts = _own_ippiQuantInvIntraNonUniform_VC1_16s_C1IR(pSrc, srcStep, pDst, dstStep,
                                                                    doubleQuant, &DstSize);
        pDst[0] = pSrc[0]*DCQuant;
        VC1_ENC_IPP_CHECK(Sts);
        Sts = ippiTransform8x8Inv_VC1_16s_C1IR(pDst,dstStep,DstSize);
IPP_STAT_END_TIME(m_IppStat->IppStartTime, m_IppStat->IppEndTime, m_IppStat->IppTotalTime);

         return Sts;
    }

    inline IppStatus InterInvTransformQuantUniform(Ipp16s* pSrc, Ipp32s srcStep,
                                                   Ipp16s* pDst, Ipp32s dstStep,
                                                   Ipp32s doubleQuant, Ipp32s TransformType)
    {
        IppStatus Sts = ippStsNoErr;
        IppiSize roiSize = {8, 8};
        IppiSize dstSize = {8, 8};

IPP_STAT_START_TIME(m_IppStat->IppStartTime);
        switch (TransformType)
        {
            case VC1_ENC_8x8_TRANSFORM:
                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR(pSrc, srcStep, pDst, dstStep,
                                                                  doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform8x8Inv_VC1_16s_C1IR(pDst,dstStep,dstSize);
                break;
            case VC1_ENC_4x8_TRANSFORM:
                roiSize.width  = 4;
                roiSize.height = 8;

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR(pSrc, srcStep, pDst, dstStep,
                                                                doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = Sts = ippiTransform4x8Inv_VC1_16s_C1IR(pDst,dstStep,dstSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR(pSrc + 4, srcStep, pDst + 4, dstStep,
                                                                        doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = Sts = ippiTransform4x8Inv_VC1_16s_C1IR(pDst + 4, dstStep, dstSize);

                break;
            case VC1_ENC_8x4_TRANSFORM:
                roiSize.width  = 8;
                roiSize.height = 4;

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR(pSrc, srcStep,
                                        pDst, dstStep,  doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform8x4Inv_VC1_16s_C1IR(pDst,dstStep,dstSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts =_own_ippiQuantInvInterUniform_VC1_16s_C1IR((Ipp16s*)((Ipp8u*)pSrc + 4*srcStep), srcStep,
                    (Ipp16s*)((Ipp8u*)pDst + 4*dstStep) , dstStep,  doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform8x4Inv_VC1_16s_C1IR((Ipp16s*)((Ipp8u*)pDst + 4*dstStep),dstStep,dstSize);
                break;
            case VC1_ENC_4x4_TRANSFORM:
                roiSize.height = 4;
                roiSize.width  = 4;

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR(pSrc, srcStep,
                                                            pDst, dstStep, doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform4x4Inv_VC1_16s_C1IR(pDst,dstStep,dstSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR(pSrc + 4, srcStep,
                                                        pDst + 4, dstStep, doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform4x4Inv_VC1_16s_C1IR(pDst+4,dstStep,dstSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR((Ipp16s*)((Ipp8u*)pSrc+4*srcStep), srcStep,
                    (Ipp16s*)((Ipp8u*)pDst+4*dstStep), dstStep,  doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform4x4Inv_VC1_16s_C1IR((Ipp16s*)((Ipp8u*)pDst + 4*dstStep),dstStep,
                                                                                            dstSize);
                VC1_ENC_IPP_CHECK(Sts);

                Sts = _own_ippiQuantInvInterUniform_VC1_16s_C1IR((Ipp16s*)((Ipp8u*)pSrc + 4*srcStep)+4, srcStep,
                    (Ipp16s*)((Ipp8u*)pDst + 4*dstStep)+4, dstStep, doubleQuant, roiSize, &dstSize);
                VC1_ENC_IPP_CHECK(Sts);
                Sts = ippiTransform4x4Inv_VC1_16s_C1IR((Ipp16s*)((Ipp8u*)pDst + 4*dstStep)+4,dstStep, dstSize);
                break;
            default:
                return ippStsErr;
                break;
        }
IPP_STAT_END_TIME(m_IppStat->IppStartTime, m_IppStat->IppEndTime, m_IppStat->IppTotalTime);

        return Sts;
    }

    inline IppStatus InterInvTransformQuantNonUniform(Ipp16s* pSrc, Ipp32s srcStep,
                                                      Ipp16s* pDst, Ipp32s dstStep,
                                                      Ipp32s doubleQuant, Ipp32s TransformType)
    {
        IppStatus Sts = ippStsNoErr;
        IppiSize roiSize = {8, 8};
        IppiSize dstSize = {8, 8};

IPP_STAT_START_TIME(m_IppStat->IppStartTime);
        switch (TransformType)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -