以下是我的理解:
cbp用于表示當前宏塊是否存在非零值
在x264中,
對于luma
由i_cbp_luma的第i位(i= 0、1、2、3)位表示一個(gè)MB中第i行4x4子塊是否有非零值
若存在非零值,則將相應位置1
對于chroma
由i_cbp_chroma表示
0x00表示:全為零
0x01表示:DC參數不為零
0x02表示:有不為零的參數
在獲得i_cbp_luma和i_cbp_chroma后,會(huì )把他們保存在cbp數組中,用
h->mb.cbp[h->mb.i_mb_xy] = (i_cbp_dc << 8) | (h->mb.i_cbp_chroma << 4) | h->mb.i_cbp_luma;
實(shí)現,也就是說(shuō)cbp的高8位放的是i_cbp_dc,低8位中高4位放的i_cbp_chroma,低4位放的i_cbp_luma
之后會(huì )根據cbp進(jìn)行其它操作~這只對于X264,JM就不是很清楚了~
關(guān)于CBP(回憶一下,“ CAVLC是用于亮度和色度殘差數據的編碼?!彼?,變換量化后求的cpb值對熵編碼非常有用。)
·DC 直流系數 AC交流系數 dc指變換后處于(0,0)位置的系數。其它為ac。
(電工學(xué)中,AC——Alternating Current交流; DC——Direct Current直流)
當使用幀內16*16時(shí),類(lèi)型名稱(chēng)由如下的結構組成:I_16*16_x_y_z。
其中,x對應于表中“幀內預測模式”字段的值,y對應于“色度CBP”字段的值,對應于“亮度CBP”字段的值。
Coded_block_pattern,即CBP,指亮度和色度分量的各小塊的殘差的編碼方案。
所謂的殘差方案包括:
(1) 所有殘差(包括DC、AC)都編碼。
(2) 只對DC系數編碼。
(3) 所有殘差(包括DC、AC)都不編碼。
對于非幀內16*16的宏塊類(lèi)型:
CodedBlockPatternLuma = coded_block_pattern % 16
CodedBlockPatternChroma = coded_block_pattern / 16
對于幀內16*16的宏塊類(lèi)型,CodedBlockPatternLuma和CodedBlockPatternChroma 的值不是由本句法元素給出,而是通過(guò)mb_type得到的。
(p185有取值的詳細解釋?zhuān)?/p>
聯(lián)系客服