VTM3.0代码阅读:encodeSlice函数

本文详细解读VTM3.0编码器中的encodeSlice函数,该函数负责一帧中所有CTU的二进制码流编码。通过调用coding_tree_unit函数,对每个CTU进行各种数据的编码工作。在函数开始时,先进行CABAC编码器初始化,然后逐个计算CTU的位置和面积,进行编码操作。
摘要由CSDN通过智能技术生成

encodeSlice代码中,一些VTM没有打开的宏定义的部分代码,为了阅读方便我给删除掉了。
encodeSlice函数在编码端,实现一帧中所有ctu的二进制码流的编码,其中调用coding_tree_unit函数进行一个ctu中各种数据的编码。
函数的入口参数pcPic表示函数需要编码的一帧,pcSubstreams表示需要写入的ctu编码数据流。
函数流程很简单,首先CABAC编码器初始化准备编码码流的写入,然后对每个ctu计算pos和area,调用coding_tree_unit函数进行编码。

void EncSlice::encodeSlice   ( Picture* pcPic, OutputBitstream* pcSubstreams, uint32_t &numBinsCoded )
{
   

  Slice *const pcSlice               = pcPic->slices[getSliceSegmentIdx()];

  const uint32_t startCtuTsAddr          = pcSlice->getSliceCurStartCtuTsAddr();
  const uint32_t boundingCtuTsAddr       = pcSlice->getSliceCurEndCtuTsAddr();   //一帧中ctu的起始和结束tsAddr


  // setup coding structure
  CodingStructure& cs = *pcPic->cs;		//要编码一帧的cs,其中存储了一帧中所有ctu的经过compress的信息
  cs.slice            = pcSlice;
  // initialise entropy coder for the slice
  m_CABACWriter->initCtxModels( *pcSlice );		//CABAC编码器初始化cabac参数模型

  DTRACE( g_trace_ctx, D_HEADER, "=====&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值