在ALF的係數上糾結了兩個周,不瞭解它爲什麼沒有傳flag卻可以從解碼端直接獲得,終於終於在VLCReader.cpp
中抓到了它,也許這對RBSP的瞭解也有很大的益處吧,下面走進變長編碼的世界。
1 簡介
VLC即變長編碼。原理是用短碼來編頻率高的信息來達到少比特的目的。
我們知道視頻編碼中多數內容都是通過CABAC進行編解碼的,對多數flag和變換系數熵編碼都使用,並具有較高的編碼效率。但以零階指數哥倫布碼爲首的VLC的編碼效率對於廣義高斯信源也很高,且編解碼簡單,因此在VPS、SPS、PPS參數和Slice頭信息的大部分語法元素上都得以使用。
2 零階指數哥倫布碼
只要根據碼字信息就能計算出編碼後的碼長,通過簡單的計算解碼碼字,無需查表。
解碼方式:
1、讀取第一個1前面0的個數,有幾位0就先加上2的幾次方,記爲C1
;
2、讀取第一個1後面的二進制數字,記爲C2
;
3、解碼值爲C1+C2-1
,若需要表達有符號數,則如下表所示:
碼字 | 解碼值 | 有符號數 |
---|---|---|
1 | 0 | 0 |
010 | 1 | 1 |
011 | 2 | -1 |
00100 | 3 | 2 |
00101 | 4 | -2 |
00110 | 5 | 3 |
00111 | 6 | -3 |