📄 umc_vc1_enc_common.h
字号:
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 + -