H 264協議CABAC熵編碼學習 四

2021-08-17 06:54:57 字數 2888 閱讀 3538

目錄:

h.264協議cabac熵編碼學習(一)

h.264協議cabac熵編碼學習(二)

h.264協議cabac熵編碼學習(三)

h.264協議cabac熵編碼學習(四)

h.264協議cabac熵編碼學習(五)

先列出計算ctxidx的公式:

再次說明,若無介紹到,則該語法元素使用式1進行推導,而式1的ctxidxoffset和ctxidxinc可以通過查閱table 9-34獲取。

mb_type是乙個比較複雜的語法元素,其包含的值較多,這裡首先介紹下其值的意義,在介紹如何推導ctxinc。

mb_type的值

該語法元素表示的巨集塊型別。接下來筆者將詳細的介紹下該語法元素的值。

乙個巨集塊可以是i、p、b、skip、pcm這5種型別中的一種。每種型別根據子巨集塊的劃分方式以及**模式,又分別有多種型別。

首先介紹下i塊的型別:

**中,左邊是i塊型別值,右邊是該值二值化後的結果。第乙個i_nxn表示的是繼續進行子巨集塊劃分,可以是4x4和8x8,根據transform_size_8x8_flag進行判定。最後乙個i_pcm表示的是使用pcm模式。

其他值可以總結為i_16x16_a_b_c,其中16x16表示是16x16劃分,而a表示的是16x16的幀內**模式,b表示chroma的cbp(coded_block_pattern),c表示的是luma的cbp。

對於p塊,其型別如下:

對於b塊,其型別如下:

對於p和b塊,其都可以繼續劃分子巨集塊,子巨集塊的型別如下:

其含義與之前介紹的相同。

協議中根據mb_type,還回推導出一些中間變數,這些變數用於協議中其他語法元素值得推導,這裡列出這些中間變數得**。

mb_type的ctxinc推導

使用式1計算ctxidx。

否則,condtermflagn為1

ctxidxinc可通過如下算式計算:ct

xidx

inc=

cond

term

flag

a+co

ndte

rmfl

agb ctx

idxi

nc=c

ondt

ermf

laga

+con

dter

mfla

gb使用式1計算ctxidx。

筆者介紹的都是幀模式的情況,因此re

fidx

zero

flag

n=((

refi

dxlx

[mbp

arti

dxn]

>0)

?0:1

) ref

idxz

erof

lagn

=((r

efid

xlx[

mbpa

rtid

xn]>0)

?0:1

)ref_idx_l0/l1的ctxidxinc的推導還需要利用到變數predmodeequalflagn,該變數的推導過程如下:

否則:condtermflagn的推導過程如下:

否則,condtermflagn為1

ctxidxinc的計算公式如下:ct

xidx

inc=

cond

term

flag

a+2∗

cond

term

flag

b ctx

idxi

nc=c

ondt

ermf

laga

+2∗c

ondt

ermf

lagb

使用式1計算ctxidx。

該語法元素ctxidxinc的推導,需要使用到中間變數predmodeequalflagn,compidx,absmvdcompn。

predmodeequalflagn跟前面的推到方式一致,compidx的推到方式如下:

absmvdcompn的推到方式如下:

否則:

ctxidxinc的計算公式如下:

可以看出ref_idx_l0/1和mvd_l0/1的ctxidxinc推導較為負責,這是因為h.264中p幀和b幀的分塊、**模式較為複雜導致的。通過前人大量的統計,總結出這樣的上下文劃分方式比較有利於壓縮。下一節筆者將介紹殘差的cabac熵編碼。

H264編碼原理

條件 1.yuv格式為yuv420 2.解析度為640 480 3.幀率為15 建議碼流500kbps,通過計算可以得到h264壓縮比約為1 100。gop中幀與幀之間的差別小 有失真壓縮包括幀內壓縮和幀間壓縮,幀內壓縮解決的是空域資料冗餘問題,幀間壓縮解決的是時域資料冗餘的問題。無失真壓縮包括dc...

H264編碼原理

前言 h264是新一代的編碼標準,以高壓縮高質量和支援多種網路的流 傳輸著稱,在編碼方面,我理解的他的理論依據是 參照一段時間內影象的統計結果表明,在相鄰幾幅影象畫面中,一般有差別的畫素只有10 以內的點,亮度差值變化不超過2 而色度差值的變化只有1 以內。所以對於一段變化不大影象畫面,我們可以先編...

h264編碼分析 哥倫布編碼

1 首先h264為什麼選用哥倫布編碼?因為h264協議為了節省bits,沒有規定字段表示資料字段長度 資料字段可以根據自身的實際值,可長可短,這樣可以大程度上的節省bit。2 無符號指數哥倫布編碼如何編碼的?在實際資料前面有幾個0就表示,有效資料位數是多少,理解為長度字段,然後資料數值 數值 1,因...