H.266/VVC代码学习24:常见的熵编码函数(encodeBin、encodeBinEP、encodeBinsEP)

在这里插入图片描述
如上过程,底层编码方式是算数编码。

1 较重要的熵编码的函数:

  virtual void      encodeBin         ( unsigned bin,   unsigned ctxId    ) = 0;
  virtual void      encodeBinEP       ( unsigned bin                      ) = 0;
  virtual void      encodeBinsEP      ( unsigned bins,  unsigned numBins  ) = 0;

2 函数和参数意义:

编码器类型函数参数1参数2注意
常规编码器encodeBin要编的数要用的上下文模型常规编码器收到n位要编的数,通过上下文模型,可以编成<n位
旁路编码器encodeBinEP要编的数要编的数一定是0或1,收到几就编几。旁路用等概模型去编
旁路编码器encodeBinsEP要编的数用几位编要编的数可能大于1,收到几就编几的二进制数。旁路用等概模型去编

3 上下文模型:

const CtxSet ContextSetCfg::IntraChromaPredMode = ContextSetCfg::addCtxSet
({

  //0     1     2
  //DM  CCLM  MDLM
  { 152, 139, 154,},//B帧
  { 138, 139, 169,},//P帧
  { 109, 139, 154,},//I帧

});

  m_BinEncoder.encodeBin(isDerivedMode ? 0 : 1, Ctx::IntraChromaPredMode(0));

当要编码的帧为I帧时,若选中模式DM。可见encodeBin常规编码器,是DM模式,故编码0,用的则在第三行I帧的数组中找到DM对应标号0,此时Ctx::IntraChromaPredMode(0)即109。
在JVET-M0453中提出coding engines被VTM4.0接收,所以上下文模型增加一行。详细了解请看JVET-M0453

4 熵解码

  virtual unsigned  decodeBin           ( unsigned ctxId    ) = 0;
  unsigned          decodeBinEP         ();
  unsigned          decodeBinsEP        ( unsigned numBins  );

decodeBin为常规解码器,接收上下文模型。
decodeBinEP和decodeBinsEP为旁路解码器,接收解码的比特数。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值