日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

H.264的CAVLC(编码.解码)过程详解

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 H.264的CAVLC(编码.解码)过程详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看264也看到CAVLC來了,把這方面的資料貼在這里:

編碼過程:
假設有一個4*4數據塊 (變化,量化后就送入熵編碼)
{
?? 0 , 3 , -1 , 0,
?? 0, -1 , ??1, 0,
?? 1 , 0 , 0 , 0,
?? 0 , 0 , 0 , 0
}
數據重排列:0301-1-1010……

1
初始值設定:
非零系數的數目(TotalCoeffs = 5
拖尾系數的數目(TrailingOnes= 3
最后一個非零系數前零的數目(Total_zeros = 3
變量NC=1;
(說明:NC值的確定:色度的直流系數NC=-1;其他系數類型NC值是根據當前塊左邊4*4塊的非零系數數目(NA)當前塊上面4*4塊的非零系數數目(NB)求得的,見畢厚杰書P1206.10
suffixLength = 0

i = TotalCoeffs = 5; (
反序編碼)

2 編碼coeff_token

查標準(BS ISO/IEC 14496-10:2003Table 9-5,可得:
If (TotalCoeffs == 5 && TrailingOnes == 3 && 0 <= NC < 2)
coeff_token = 0000 100;
Code output = 0000 100;

3
編碼所有TrailingOnes的符號:
逆序編碼,三個拖尾系數的符號依次是+(0),-(1),-(1);
:
TrailingOne sign[i--] = 0;
TrailingOne sign[i--] = 1;
TrailingOne sign[i--] = 1;
Code output = 0000 100??? 0 11;
4
編碼除了拖尾系數以外非零系數幅值Levels:( 畢書這個例子說的不是很細,而且有個小錯誤)
過程如下:
1)將有符號的Level[ i ]轉換成無符號的levelCode
如果Level[ i ]是正的,levelCode = (Level[ i ]<<1) – 2;??
如果Level[ i ]是負的,levelCode = - (Level[ i ]<<1) – 1;
2)計算level_prefixlevel_prefix = levelCode / (1<<suffixLength)
查表9-6可得所對應的bit string
3)計算level_suffixlevel_suffix = levelCode % (1<<suffixLength)
4)根據suffixLength的值來確定后綴的長度;
5suffixLength ??updata
If ( suffixLength == 0 )
????? suffixLength++

else if ( levelCode > (3<<suffixLength-1) && suffixLength <6)

注:大于預置值就suffixLength++;
???? suffixLength++;

回到例子中,依然按照逆序,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 output = 0000 100 011 1;
編碼下一個Level:Level[0] = 3;
levelCode = 4;level_prefix = 2;查表得bit string = 001;
level_suffix = 0;suffixLength = 1;故碼流為0010;
Code output = 0000 100 011 1 0010 ;
i = 0,編碼Level結束。

5)編碼最后一個非零系數前零的數目(TotalZeros):
查表9-7,當TotalCoeffs = 5,total_zero = 3時,bit string = 111;
Code output = 0000 100 011 1 0010 111;

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 output = 0000 100 011 1 0010 111 10 1 1 01 ;
編碼完畢。(CAVLC主要是查表,標準中的表是通過大量實驗的出來的!)

?

?

解碼過程:


接收碼流為:0000 1000 1110 0101 1110 1101

計算NC = 1
解碼詳細過程如下:
1.?????? 根據Coeff_token和NC查表(見標準表9-5),得到非零系數數目TotalCoeffs和拖尾系數數目TrailingOnes
NC = 1選擇對應的表,Coeff_token為0000100,查表得到TotalCoeffs=5 TrailingOnes=3
輸出序列:無
2. 解析拖尾系數
由第一步得到拖尾系數有3個,輸入拖尾系數符號編碼碼流011,得到兩個拖尾系數由先到后是 -1,-1,1
output :-1,-1,1(反序輸出)
3.?????? 解析除拖尾系數外的非零系數的幅值(level)
(1)?????? 確定后綴長度SuffixLength
(2)?????? 根據碼流查表9-6得到前綴LevelPrefix
(3)?????? 根據前綴和后綴,得到

????????????? LevelCode=(levelprefix<<suffixlength)+levelsuffix
(4)?????? Levelcode為偶數 level=(level+2)/2
??????????????? Levelcode為奇數 level=(-level-1)/2
(5)?????? 根據設定的閾值確定是否update Suffixlegth
回到例子中,按照逆序
i=0, Sufixlegth=0,查表9-6,1對應的前綴levelprefix=0,levelcode=0,

???? 計算得到level=1 , i++ , sufixlegth++(第一次都要加)
i=1,sufixlegth=1,查表0010(3為前綴,1位后綴)對應的前綴????? levelprefix=2,計算levelcode=4,level=3,i++
i=2 >= TotalCoeffs-TrailingOnes,除拖尾系數外的非零系數解析完畢
output:3,1,-1,-1,1
4.?????? 解析每個非零系數前零的個數
根據TotalCoeffs=5和輸入碼流111查表9-7得到TotalZeros=3
初始i=TotalCoeffs-1=4 ,zeroleft=TotalZeros=3 , 5個非零系數前零的數目解析如下:
i=4,zeroleft=3,根據碼流10,查表9-10,runbefor=1,

?? 輸出序列:3,1,-1,-1,0,1
i=3,zeroleft=3-1=2,根據碼流1,查表runbefore=0,

輸出序列:3,1,-1,-1,0,1
i=2,zeroleft=2-0=2,根據碼流1,查表runbefore=0,

輸出序列:3,1,-1,-1,0,1
i=1,zeroleft=2-0=2,根據碼流01,查表runbefore=1,

輸出序列:3,0,1,-1,-1,0,1
i=0,zeroleft=2-1=1,輸出序列:0,3,0,1,-1,-1,0,1
5. 解碼完畢,將剩下的元素用0補齊,反序排列就可以得到4*4矩陣。
6. 最后還原為一個4*4數據塊
{
?? 0 , 3 , -1 , 0,
?? 0,?? -1 , 1,?? 0,
?? 1 ,?? 0 , 0 , 0,
?? 0 ,?? 0 , 0 , 0
}

總結

以上是生活随笔為你收集整理的H.264的CAVLC(编码.解码)过程详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。