transformskip和intra block copy, palatte mode 一样,是针对screen content 的编码工具,该工具的提出是因为对于screen content,其经常包含尖锐边缘或者跳变,相关性极差,这种情况下进行正常的transform反而会带来负面影响,还不如跳过变换环节,直接对残差进行量化。下面来直接看代码:
if (pcCU->getTransformSkip(uiAbsPartIdx, compID) != 0)//开启transformskip
{
xTransformSkip(pcResidual, uiStride, m_plTempCoeff, rTu, compID);
}
else. //执行正常的transform
{
const Int channelBitDepth = pcCU->getSlice()->getSPS()->getBitDepth(toChannelType(compID));
xT(channelBitDepth, rTu.useDST(compID), pcResidual, uiStride, m_plTempCoeff, uiWidth, uiHeight, pcCU->getSlice()->getSPS()->getMaxLog2TrDynamicRange(toChannelType(compID)));
}
#if DEBUG_TRANSFORM_AND_QUANTISE
std::cout << g_debugCounter << ": " << uiWidth << "x" << uiHeight << " channel " << compID << " TU between transform and quantiser\n";
printBlock(m_plTempCoeff, uiWidth, u