有關slice 解碼過程的(翻譯標準8.2部分)

(在這裏,只考慮到幀(frame)的情況,對於場(field),相互場對(complementary field pair)暫不作考慮)
1.圖像序列號POC(picture order count)解碼過程.
picture order count ,在解B slice時,用來決定參考picture初始化順序; 在解時間直接模式(temporal direct mode)下的運動矢量,不直接模式(implicit mode)下的B slice權預測(weighted prediction),和解碼器一致性檢測(conformance checking)時,用來表現幀和場之間picture 順序不同).
--每一個編碼幀和兩個picture order count 相關.稱爲TopFieldOrderCnt 和 BottomFieldOrderCnt,各自對應於top field 和 bottom field.
Topfiieldordercnt 和BottomFieldOrderCnt通過調用POC解碼過程得到的. POC 有三種類型(type 0,1,2).
對於picx:
PicOrderCnt(picx)=min(TopFieldOrderCnt,BottomFieldOrderCnt)
DiffPicOrderCnt( pica, picb ) = PicOrderCnt( pica ) - PicOrderCnt( picb )
這三種類型的解碼過程在標準的8.2.1.1, 8.2.1.2, and 8.2.1.3.

2.宏塊(macroblock)到slice group映射的解碼過程
這個過程時在每個slice 開始時調用的.得到MbToSliceGroupMap(宏塊到所屬幀組的映射表).
slice group 有6種映射模式(8.2.2.1—8.2.2.8),分別用於不同的情況編碼.例如電視廣播,背景相對穩定,只需傳送人的頭像部分的slice宏塊就行了,可以選slice type 2.

3.slice 數據劃分(data partition)解碼過程
輸入:
--slice 數據劃分a層(layer)rbsp,
--當類別3(category 3)中語法元素在slice 數據中出現,slice 數據劃分b層rbsp有和a層一樣的slice_id.
--當類別4中的語法元素在slice數據中出現,slice數據劃分c層rbsp有和a層一樣的slice_id.
輸出:編碼slice.
當不使用slice 數據劃分,編碼slice表現爲rbsp沒有分割,包含slice 頭,slice數據語法結構包含類別2,3,4中所有語法元素,宏塊數據.
當使用slice數據劃分,每一個類別中的語法元素分離在不同的nal單元.解碼過程處理slice數據劃分過程和沒有劃分時是等價的.
註釋:語法分類3和解i,si宏塊殘差數據有關,4中和解p,b中的殘差數據相關,2中包含所有和解碼宏塊相關的語法元素.

4.參考picture 列表創建的解碼過程
對於P,SP幀,使用Refpiclist0,對於B使用RefPicList0,RefPicList1.
解碼的參考畫面(picture) 標記爲使用短(short-term) 參考幀或長(long-term)參考幀兩種.
短解碼的參考畫面通過frame_num指定,長解碼的參考畫面通過long term frame index 指定.
如果LongTermEntry( RefPicListx[ i ] )==1,表示是長參考幀,於LongTermPicNum相聯繫.
如果LongTermEntry( RefPicListx[ i ] )==0,表示是短參考幀,於PicNum相聯繫.
修改的參考畫面數量在表(list) RefPicList0中是num_ref_idx_l0_active_minus1 + 1,在RefPicList1中是num_ref_idx_l1_active_minus1 + 1,一個參考畫面可以有多個所有在流改的參考畫面表RefPicList0, RefPicList1.
4.1 picture numbers 獲取過程
if( framenum > frame_num )
FrameNumWrap = FrameNum – MaxFrameNum 
else
FrameNumWrap = FrameNum
PicNum = FrameNumWrap
LongTermPicNum = LongTermFrameIdx 

4.2 參考畫面表初始化過程
對於P,SP
RefPicList0:
short-term (降序), long-term(升序),null 

對於B
RefPicList0
short-term(降序) ,short-term(升序) , long-term(升序) , null
第一部分PicOrderCnt(frm )< PicOrderCnt( currpic )
第二部分PicOrderCnt(frm)> PicOrderCnt( currpic )
RefPicList1
short-term(升序) ,short-term(降序) , long-term(升序), null
第一部分PicOrderCnt(frm )> PicOrderCnt( currpic )
第二部分PicOrderCnt(frm)<PicOrderCnt( currpic ) 
4.3參考畫面表重排序過程
對於短畫面(short-term picture)
reordering_of_pic_nums_idc等於 0,或1
首先求出 PicNumLX

for( cIdx = num_ref_idx_lx_active_minus1 + 1; cIdx > refidxLX; cIdx-- )

RefPicListX[ cIdx ] = RefPicListX[ cIdx – 1]

RefPicListX[ refIdxLX++ ] = PicNumLX

nIdx = refIdxLX

for( cIdx = refIdxLX; cIdx <= num_ref_idx_lx_active_minus1 + 1; cIdx++ ) 

if( LongTermEntry( refPicListx[ cIdx ] ) | | RefPicListX[ cIdx ] != picnumlx )

RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ]


對於長畫面(long-term picture)
reordering_of_pic_nums_idc等於 2

for( cIdx = num_ref_idx_lx_active_minus1 + 1; cIdx > refidxLX; cIdx-- )

RefPicListX[ cIdx ] = RefPicListX[ cIdx – 1]

RefPicListX[ refIdxLX++ ] = LongTermPicNum 

nIdx = refIdxLX

for( cIdx = refIdxLX; cIdx <= num_ref_idx_lx_active_minus1 + 1; cIdx++ )

if( !LongTermEntry( RefPicListX[ cIdx ] ) | | RefPicListX[ cIdx ] != LongTermPicNum )

RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ]

5.解碼的參考畫面標記過程(marking process)
nal_ref_idc 不等於0的解碼畫面, 作爲參考畫面, 標記爲短參考幀或長參考幀. 對於解碼參考幀,它的兩個場的標記和幀相同. 標記爲長參考幀, 用LongTermFrameIdx標識,標記爲短參考幀或長參考幀的幀或相互的參考場對,可以作爲幀間預測的參考幀, 直到幀標記爲不使用爲參考幀(unused for reference).
畫面標記爲不使用參考幀(unused for reference),可以通過使用滑動窗口(slice windows)參考畫面標記過程,一種先進先出的機制,或自適應存儲畫面標記過程(adaptive memory control reference picture marking process),一種自定義的自適應標記過程.
在解碼過程中short-term 參考畫面,使用picnum指定,long-term 參考畫面使用LongTermPicNum.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章