基於內容自適應的變長編碼方式用於編碼
zigzag
順序掃瞄的
4x4和
2x2殘差變換係數塊。 1、
編碼係數個數和零序列
(coeff_token):
coeff_token = ;
totalcoeff =
編碼非零係數總數
;[0 , 16]
trailingones =
特殊處理的
+/-1
個數;[0 , 3] 2、
編碼每個
trailingone
的符號:
倒序,從高頻開始向前編碼
trailingone
符號,每個符號一位,
0為正,
1為負,最多為3個。
3、編碼餘下非零係數的幅值:
編碼順序
:倒序,從高頻開始向前編碼直到
dc係數,每個幅值碼字level[i]包含乙個幅值字首level_prefix和乙個幅值字尾level_suffix。
level[i]:
level
為實際係數的幅值。但有個例外:
當trailingones<3時,那麼被編碼的第乙個非t1 幅值肯定不是+/-1(否則將算作t1)。這個幅值如果為負就加1(如果為正就減1),例如+/-2 被對映成+/-1, +/-3對映成+/-2進行編碼,這樣可以用較短的變長碼.
levelcode:
如果 level[i]
為正, levelcode = (level[i] << 1) - 2;
如果 level[i]
為負, levelcode = -(level[i] << 1) - 1; 計算
level_prefix
: 編碼時
:level_prefix = levelcode / (1 << suffixlength);
根據level_prefix
查標準表
9-6得到碼字
解碼時:
從位元流的當前位置開始讀取,計算為0的
leading bits
數量。0
的長度即為
level_prefix
值,對應關係可察看標準文件中表9-6。 計算
suffixlength:
suffixlength
為0-6
位元,其長度是自適應變換的。
suffixlength
增長過程: 1、
初始化suffixlength = 0 ;
如果有超過
10個非零係數,並且少於3個
tailingones
,這時suffixlength = 1;
2、編碼最高頻的非零係數; 3、
如果這個係數的幅值大於一定的閾值,則增長
suffixlength 當前
suffixlength 增加
suffixlength
的係數閾值 0
0 13 2
6 312 4
24 5
48 6
n/a
更新suffixlength
函式如下:
if(suffixlength == 0)
++suffixlength;
else if(level[i] > (3<
++suffixlength; 計算
levelsuffixsize
: (字尾是長度為levelsuffixsize的無符號整數)
除了以下兩種情況
levelsuffixsize
等於suffixlength:
1、level_prefix == 14 && suffixlength == 0
時, levelsuffixsize = 4; 2、
level_prefix >= 15
時,levelsuffixsize = level_prefix – 3; 4、
編碼最後乙個非零係數前零的個數
使用vlc
編碼最高頻非零係數前所有零的個數
total_zeros:
既為最高非零係數前所有零的個數;編碼表見標準表9-7;表9-8;表9-9
5、編碼每個零遊程
zerosleft
: 當前係數之前所有的零的個數
run_before
: 緊接當前係數前的零個數
基於JTable的列寬與內容自適應的實現方法
jta程式設計客棧ble預設的各列寬度平均,下函式可以實現各列寬度與內容長度適應!複製 如下 public void fittablecolumns jtable mytable header.setresizingcolumn column 此行很重要 column.setwidth width ...
基於MPC的自適應巡航控制
關於mpc 模型 控制 網上的理論很多,簡單易懂的,複雜全面的都有。這邊我也記錄一下mpc的學習,主要是通過汽車acc的例子,這裡汽車模型只是簡單的積分器,主要目的還是mpc的乙個應用。中間的相減模組不小心被注釋掉了,不想開啟matlab重新截圖了,因為懶,直接編輯了一下,ahhh 首先分別用兩個積...
webView自適應實際內容高度的問題
問題描述 專案詳情要用h5展示,載入webview,高度不確定,需要根據webview的內容高度去設定。webview可以在載入完成時獲取到網頁內容高度,然後再去改變webview的frame即可。void webviewdidfinishload uiwebview webview webview...