之前在transformNxN的学习中提到,xT函数是前向变换的入口函数,实际上xT完成的是变换前的准备工作,真正的前向变换由xTrMxN函数实现。
先来看下xT函数。xT只是一个入口函数,首先定义了残差块block和系数块coeff,然后调用xTrMxN进行前向变换。
/** Wrapper function between HM interface and core NxN forward transform (2D)
* \param channelBitDepth bit depth of channel
* \param useDST
* \param piBlkResi input data (residual)
* \param uiStride stride of input residual data
* \param psCoeff output data (transform coefficients)
* \param iWidth transform width
* \param iHeight transform height
* \param maxLog2TrDynamicRange
*/
//前向变换的入口函数
Void TComTrQuant::xT( const Int channelBitDepth, Bool useDST, Pel* piBlkResi, UInt uiStride, TCoeff* psCoeff, Int iWidth, Int iHeight, const Int maxLog2TrDynamicRange )
{
#if MATRIX_MULT
if( iWidth == iHeight)
{
xTr(channelBitDepth, piBlkResi, psCoeff, uiStride, (UInt)iWidth, useDST, maxLog2TrDynamicRange);
return;
}
#endif
TCoeff block[ MAX_TU_SIZE * MAX_TU_SIZE ]; //同于存储残差块
TCoeff coeff[ MAX_TU_SIZE * MAX_TU_SIZE ]