HEVC代码学习24:encodeResAndCalcRdInterCU函数

本文深入探讨HEVC编码中的关键函数encodeResAndCalcRdInterCU,该函数负责计算残差和率失真成本。内容包括skip模式的实现,包括设置skip标志、残差清零、失真计算以及熵编码;同时介绍了残差编码过程,涉及残差计算、率失真代价估计及熵编码。通过对这两个部分的详细分析,有助于理解HEVC编码流程。
摘要由CSDN通过智能技术生成

推荐http://blog.csdn.net/nb_vol_1/article/details/51190324

http://blog.csdn.net/lin453701006/article/details/72403936学习中,我们提到xCheckRDCostInter调用了encodeResAndCalcRdInterCU来计算残差和RD cost。今天来学习encodeResAndCalcRdInterCU函数。

encodeResAndCalcRdInterCU的主要功能是计算残差和RD cost,以及进行熵编码。
encodeResAndCalcRdInterCU主要分为两大部分:无残差编码(skip模式)和残差编码。

无残差编码(skip模式):
1、设置skip flag。
2、残差置为0,重构图像直接复制预测图像。
3、计算重构图像与原始图像之间的失真。
4、对skip flag和merge索引进行熵编码。
5、存储总的bit数、失真、代价。

残差编码:
1、原始图像减预测图像计算残差。
2、估计残差的率失真代价和比特代价。
3、进行熵编码。
4、计算总失真。
5、存储总的bit数、失真、代价。

//计算PU的残差和率失真
//! encode residual and calculate rate-distortion for a CU block
Void TEncSearch::encodeResAndCalcRdInterCU( TComDataCU* pcCU, TComYuv* pcYuvOrg, TComYuv* pcYuvPred,
    TComYuv* pcYuvResi, TComYuv* pcYuvResiBest, TComYuv* pcYuvRec,
    Bool bSkipResidual DEBUG_STRING_FN_DECLARE(sDebug) )
{
    assert ( !pcCU->isIntra(0) );       

    const UInt cuWidthPixels      = pcCU->getWidth ( 0 );
    const UInt cuHeightPixels     = pcCU->getHeight( 0 );
    const Int  numValidComponents = pcCU->getPic()->getNumberValidComponents();
    const TComSPS &sps=*(pcCU->getSlice()->getSPS());

    // The pcCU is not marked as skip-mode at this point, and its m_pcTrCoeff, m_pcArlCoeff, m_puhCbf, m_puhTrIdx will all be 0.
    // due to prior calls to TComDataCU::initEstData(  );

    
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值