今天發現原來SVC Analyzer開著 bitstream (.264檔)時
Encoder沒有辦法正常運作
其實想想也正常,使用權問題
Encoder的估測程式碼
找到一個人寫的筆記還挺清楚的
http://www.rosoo.net/a/201001/8431.html
http://blog.csdn.net/l35633/article/category/727146
[原創] Skip宏塊與Direct預測模式淺析
Skipped Macroblock 是宏塊類型,Direct Prdeiction 是宏塊的預測方式
Skipped Macroblock 顧名思義就是跳過不編碼的宏塊,那麼在解碼端如何重構這個宏塊呢?這就有兩種選擇:
1、採用Direct 方式(這是一種特殊的預測方式)先預測出其MV,後面的處理就跟一般的幀間宏塊類似了(根據MV 獲取參考圖像,再進行插值重構);
2、不採用Direct 方式進行預測,而直接copy 參考宏塊。
第一種選擇正是B 片中的Skip 宏塊所採取的方式,同時又分為空間和時間Direct 預測方式
第二種選擇正是P 片中的Skip 宏塊所採用的方式,也就是直接copy 參考宏塊
現在應該明白Skip 與Direct 的聯繫了吧?但要注意的是B 片中有一種類型的宏塊:B_Direct_16*16,它很特殊,它的名字裡有“Direct”這個單詞,它的預測方式也採用的Direct 方式。這種類型的宏塊即有B 片中的Skip 宏塊的特性(MV 採用Direct 預測方式得到),同時又有一般幀間宏塊的特性(有像素殘差,Skip 宏塊是沒有像素殘差的)
B skip 與B direct16x16 的差別就是前者無殘差,後者有殘差。 http://bbs.chinavideo.org/viewthread.php?tid=1020
skip類型塊(或宏塊)沒有運動矢量差,但是有殘差,只是在編碼的時候扔掉了
對於殘差的處理
在rdo和非rdo下的處理是不一樣的
在非rdo下,需要對殘差進行變化量化,若16x16為最終模式且cbp為0(或者有少量的4x4block為非零),那麼該宏塊就是skip模式,簡單的說,在非rdo情況下,skip模式是16x16模式的一個特殊情況
在rdo情況下,不需要對殘差進行變化量化,直接對skip模式計算rdcost(skip的碼率即編碼所佔的比特數,雖然不對殘差和矢量差進行編碼,但是編碼比特數也是不為零的,比如模式所佔的比特數、是宏塊內第幾個skip塊等語法元素信息),通過判斷rdcost是否最小,來判定宏塊是否為skip 模式,就是說,在rdo情況下,skip是獨立的一種模式
Direct Prdeiction 是宏塊的預測方式 http://blog.csdn.net/l35633/article/details/5924090
-----------------------------------------------------------------
spatial inter layer的幾種編碼方式
幾個相關語法元素
• base mode flag:指明一種宏塊類型。1表示當前巨集塊(enhancement layer中)只編碼殘差資訊,幀內編碼模式或運動相關資訊都有相應的參考層中塊推導出來。EL中的宏塊無論inter還是intra都可以base mode flag=1。
• motion prediction flag: 作用於宏塊中每個partition的reference list,指明reference index、motion vector prediction是否由reference layer中相應的塊推導出來。
• residual prediction flag:只要當前宏塊是inter,無論base mode flag是否為1,都可以採用下述第二種inter-layer prediction。
三種層間預測模式:
1 Inter-Layer Motion Prediction
base mode flag為1,且相應的參考層中的8x8塊是幀間編碼。Block partition資訊、reference index、motion vectors由reference layer中相應的8x8塊推導出來。此時block partition資訊由reference layer中相應的8x8塊的partition資訊上採樣得到。同時得到與partition相應的reference index、motion vectors(需要先被scale)。
base mode flag為0時,還可以有一種對motion的interlayer prediction,開關為motion prediction flag:
- motion prediction flag為1,則與此reference list相關的reference index、motion vector prediciton由reference layer中相應的塊推導出來。這裏與base mode flag為1時有點區別,這裏只是MVP由reference layer推導出來,所以EL還要傳送MVD。別忘了motion vectors需要被scale。
- motion prediction flag為0,傳統的幀間宏塊。
2 Inter-layer Residual Prediction
在enhencement layer中的inter-coded宏塊,無論是採用base mode flag還是傳統的幀間宏塊,都可以採用這一方式。
residual prediction flag為1,則reference layer中相應的8x8塊的殘差經過bilinear上採樣,作為enhencement layer宏塊的殘差預測,enhencement layer中傳送“殘差的殘差”。需要注意的是這裏的上採樣不要跨越reference layer的變換塊邊界,否則會降低視覺效果,具體的處理辦法是對邊界進行重複外拓。
3 Inter-layer Intra-prediction(Texture Prediction)
base mode flag為1,且相應的reference layer中的8x8塊是幀內編碼。
參考層中的4x4塊(4個)被重構,經過去塊濾波操作後上採樣得到預測信號。亮度上採樣採用的是4-tap的FIR濾波器,色度上採樣採用的是bilinear濾波器。而後,ehencement layer傳送殘差係數,經反變換後加到預測信號上。
在upsampling之前,需要對reference layer的重構資訊進行去塊濾波。
為了保證sigle loop的解碼,需要避免在reference layer進行motion compensation,即Constrained Inter-layer Intra-prediction。
出處:http://blog.csdn.net/l35633/article/details/5846507
- Jun 27 Mon 2011 17:19
H.264 Encoder & Decoder & Analysis
close
全站熱搜
留言列表
發表留言