VTM3.0代码阅读:xIntraCodingTUBlock函数

xIntraCodingTUBlock函数在xRecurIntraCodingLumaQT和xRecurIntraChromaCodingQT中扮演关键角色,负责基于给定的变换模式和帧内预测模式计算像素失真。函数首先进行帧内预测得到pred像素,然后计算残差,通过变换和逆变换得到解码端的reco像素,最终确定失真。相较于VTM1,主要增加了局部运动(LM)预测。
摘要由CSDN通过智能技术生成

xIntraCodingTUBlock在xRecurIntraCodingLumaQT函数和xRecurIntraChromaCodingQT函数中均会被调用,进行给定变换模式和帧内预测模式下的一系列操作。
调用xIntraCodingTUBlock函数的目的,就是对tu在给定变换模式和帧内模式的情况下,求得解码端reco像素和orig的失真。
函数流程:
对pu进行帧内预测得到pred像素,由pred像素和orig像素得到残差像素resi,将resi通过调用transformNxN和invTransformNxN函数,得到解码端得到的resi像素,其与pred求和即的reco像素;最后通过reco像素和orig像素,求得失真,返回。
具体的会有很多种情况,函数中都有注释。
与VTM1中的代码相比,没太大差别,就多了LM预测。

void IntraSearch::xIntraCodingTUBlock(TransformUnit &tu, const ComponentID &compID, const bool &checkCrossCPrediction, Distortion& ruiDist, const int &default0Save1Load2, uint32_t* numSig )
{
   
  if (!tu.blocks[compID].valid())
  {
   
    return;
  }

  CodingStructure &cs                       = *tu.cs;

  const CompArea      &area                 = tu.blocks[compID];	//tu的area
  const SPS           &sps                  = *cs.sps;
  const PPS           &pps                  = *cs.pps;

  const ChannelType    chType               = toChannelType(compID);
  const int            bitDepth             = sps.getBitDepth(chType);

  PelBuf         piOrg                      = cs.getOrgBuf    (area);	//原始像素
  PelBuf         piPred                     = cs.getPredBuf   (area);	//预测像素
  PelBuf         piResi                     = cs.getResiBuf   (area);	//残差像素
  PelBuf         piOrgResi                  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值