X264 CBP

cbp一共6bit,高2bit表示cbpc

(

2:cb、cr中至少一个4x4块的AC系数不全为0;

1:cb、cr中至少一个2x2的DC系数不全为0;

0:所有色度系数全0



低4bit分别表示4个8x8亮度块,其中从最低一位开始的4位分别对应00,10,01,11位置的8*8亮度块。

如果某位为1,表示该对应8*8块的4个4*4块中至少有一个的系数不全为0

ICBPTAB[0] = 0  (00 0000)表示既没有亮度系数,也没有色差系数

ICBPTAB[1] = 16 (01 0000)表示没有亮度系数,有色差直流系数(没有交流系数)

ICBPTAB[2] = 32 (10 0000)表示没有亮度系数,有色差交流系数(可能含有直流系数)

ICBPTAB[3] = 15 (00 1111)表示有亮度系数,没有色差系数

ICBPTAB[4] = 31 (01 1111)表示有亮度系数,有色差直流系数(没有交流系数)

ICBPTAB[5] = 47 (10 1111)表示有亮度系数,有色差交流系数(可能含有直流系数)

 

以下是我的理解:

cbp用于表示当前宏块是否存在非零值

在x264中,

对于luma

由i_cbp_luma的第i位(i= 0、1、2、3)位表示一个MB中第i行4x4子块是否有非零值

若存在非零值,则将相应位置1

对于chroma

由i_cbp_chroma表示

0x00表示:全为零

0x01表示:DC参数不为零

0x02表示:有不为零的参数

在获得i_cbp_luma和i_cbp_chroma后,会把他们保存在cbp数组中,用

h->mb.cbp[h->mb.i_mb_xy] = (i_cbp_dc << 8) | (h->mb.i_cbp_chroma << 4) | h->mb.i_cbp_luma;

实现,也就是说cbp的高8位放的是i_cbp_dc,低8位中高4位放的i_cbp_chroma,低4位放的i_cbp_luma

之后会根据cbp进行其它操作~这只对于X264,JM就不是很清楚了~

关于CBP(回忆一下,“ CAVLC是用于亮度和色度残差数据的编码。”所以,变换量化后求的cpb值对熵编码非常有用。)

·DC 直流系数 AC交流系数  dc指变换后处于(0,0)位置的系数。其它为ac。

 (电工学中,AC——Alternating Current交流; DC——Direct Current直流)

当使用帧内16*16时,类型名称由如下的结构组成:I_16*16_x_y_z。

其中,x对应于表中“帧内预测模式”字段的值,y对应于“色度CBP”字段的值,对应于“亮度CBP”字段的值

Coded_block_pattern,即CBP,指亮度和色度分量的各小块的残差的编码方案。

所谓的残差方案包括:

(1)       所有残差(包括DC、AC)都编码。

(2)       只对DC系数编码。

(3)       所有残差(包括DC、AC)都不编码。

对于非帧内16*16的宏块类型:

CodedBlockPatternLuma = coded_block_pattern % 16

CodedBlockPatternChroma = coded_block_pattern / 16

对于帧内16*16的宏块类型,CodedBlockPatternLuma和CodedBlockPatternChroma 的值不是由本句法元素给出,而是通过mb_type得到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值