HEVC码率控制代码追踪(一)(HEVC code tracing-Rate control)

本文记录了作者对HEVC码率控制的学习心得,主要聚焦于码率分配和目标码率实现这两个关键步骤。通过分析程序调用层次,从GOP、picture、LCU三个层面探讨码率控制的实现细节,旨在展现码率控制的全貌。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来的一段时间将对码率控制代码追踪这一块的学习心得和领悟做个简要的记录,在将来的某一天,这些博文将让我清晰地看到自己的成长。偷笑

码率控制的关键两个步骤:(1)码率分配(2)目标码率的实现

所以在看代码的时候也尽量将步骤与代码对应起来,分块阅读,整合思考与优化。

在码率控制的两个步骤中又可以依据操作对象(层次)的不同,分别从GOP,picture,lcu这三个方面去看程序。在对功能函数进行解读之前,我先来看下在整个解决方案中,程序是如何一层一层的调用下来的。

// call encoding function
  cTAppEncTop.encode();//cTAppEncTop是TAppEncTop的对象,该语句的含义是调用成员函数。。encode是类TAppEncTop的成员函数
这是main函数里面的一段代码,也是真正编码功能开始的入口。
 // call encoding function for one frame
    if ( m_isField ) m_cTEncTop.encode( bEos, flush ? 0 : pcPicYuvOrg, flush ? 0 : &cPicYuvTrueOrg, snrCSC, m_cListPicYuvRec, outputAccessUnits, iNumEncoded, m_isTopFieldFirst );
    else             m_cTEncTop.encode( bEos, flush ? 0 : pcPicYuvOrg, flush ? 0 : &cPicYuvTrueOrg, snrCSC, m_cListPicYuvRec, outputAccessUnits, iNumEncoded );

这是Void TAppEncTop::encode()里面的一段代码,调用类TEncTop的成员函数encode。下面进入到这个类成员函数中去。到这算是从APP类来到了lib类工程当中。

<span style="color:#ff6666;">Void TEncTop::encode</span>( Bool flush, TComPicYuv* pcPicYuvOrg, TComPicYuv* pcPicYuvTrueOrg, const InputColourSpaceConversion snrCSC, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded )
{
  if (pcPicYuvOrg != NULL)
  {
    // get original YUV
    TComPic* pcPicCurr = NULL;

    xGetNewPicBuffer( pcPicCurr );
    pcPicYuvOrg->copyToPic( pcPicCurr->getPicYuvOrg() );
    pcPicYuvTrueOrg->copyToPic( pcPicCurr->getPicYuvTrueOrg() );

    // compute image characteristics
    if ( getUseAdaptiveQP() )
    {
      m_cPreanalyzer.xPreanalyze( dynamic_cast<TEncPic*>( pcPicCurr ) );
    }
  }

  if ((m_iNumPicRcvd == 0) || (!flush && (m_iPOCLast != 0) && (m_iNumP
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值