CAVLC編碼過程詳解

2021-05-23 06:22:33 字數 2094 閱讀 2255

編碼過程:

假設有乙個4*4資料塊

資料重排列:0,3,0,1,-1,-1,0,1,0……

1) 初始值設定:

非零係數的數目(totalcoeffs) = 5;

拖尾係數的數目(trailingones)= 3;

最後乙個非零係數前零的數目(total_zeros) = 3;

變數nc=1;

(說明:nc值的確定:色度的直流係數nc=-1;其他係數型別nc值是根據當前塊左邊4*4塊的非零係數數目(na)當前塊上面4*4塊的非零係數數目(nb)求得的,見畢厚傑書p120表6.10)

suffixlength = 0;

i = totalcoeffs = 5;

2) 編碼coeff_token:

查標準(bs iso/iec 14496-10:2003)table 9-5,可得:

if (totalcoeffs == 5 && trailingones == 3 && 0 <= nc < 2)

coeff_token = 0000 100;

code = 0000 100;

3) 編碼所有trailingones的符號:

逆序編碼,三個拖尾係數的符號依次是+(0),-(1),-(1);

即: trailingone sign[i--] = 0;

trailingone sign[i--] = 1;

trailingone sign[i--] = 1;

code = 0000 1000 11;

4) 編碼除了拖尾係數以外非零係數幅值levels:

過程如下:

(1)將有符號的level[ i ]轉換成無符號的levelcode;

如果level[ i ]是正的,levelcode = (level[ i ]<<1) – 2;  

如果level[ i ]是負的,levelcode = - (level[ i ]<<1) – 1;

(2)計算level_prefix:level_prefix = levelcode / (1< (3

回到例子中,依然按照逆序,level[i--] = 1;(此時i = 1)

levelcode = 0;level_prefix = 0;

查表9-6,可得level_prefix = 0時對應的bit string = 1;

因為suffixlength初始化為0,故該level沒有字尾;

因為suffixlength = 0,故suffixlength++;

code = 0000 1000 111;

levelcode = 4;level_prefix = 2;查表得bit string = 001;

level_suffix = 0;suffixlength = 1;故碼流為0010;

code = 0000 1000 1110 010;

i = 0,編碼level結束。

5)編碼最後乙個非零係數前零的數目(totalzeros):

查表9-7,當totalcoeffs = 5,total_zero = 3時,bit string = 111;

code = 0000 1000 1110 0101 11;

6) 對每個非零係數前零的個數(runbefore)進行編碼:

i = totalcoeffs = 5;zerosleft = total_zeros = 3;查表9-10:

依然按照逆序編碼

zerosleft =3, run_before = 1 run_before[4]=10;

zerosleft =2, run_before = 0 run_before[3]=1;

zerosleft =2, run_before = 0 run_before[2]=1;

zerosleft =2, run_before = 1 run_before[1]=01;

zerosleft =1, run_before = 1 run_before[0]不需要碼流來表示

code = 0000 1000 1110 0101 1110 1101;

編碼完畢。

CAVLC編碼過程詳解

編碼過程 假設有乙個4 4資料塊 資料重排列 0,3,0,1,1,1,0,1,0 1 初始值設定 非零係數的數目 totalcoeffs 5 拖尾係數的數目 trailingones 3 最後乙個非零係數前零的數目 total zeros 3 變數nc 1 說明 nc值的確定 色度的直流係數nc 1...

H 264中CAVLC解碼過程詳解

例項解析 nc 1 編碼後得到輸出碼流為 0000 1000 1110 0101 1110 1101 解碼詳細過程如下 1.根據coeff token和nc查表 見標準表9 5 得到非零係數數目totalcoeffs和拖尾係數數目trailingones nc 1選擇對應的表,coeff token...

從編碼到執行 程式編譯過程詳解

程式從一堆字元怎麼變成乙個可執行的程式呢,在這我們使用最簡單的乙個hello word 程式來演示程式的乙個完整流程。在這過程中找到一些有用的除錯方法,幫助我們在debug時快速解決問題。程式編譯時的整體流程經過 執行環境 windows 10 cygwin gcc 版本 7.4.0 按照c語言語法...