H 264參考幀管理方法

2021-06-20 09:06:42 字數 1186 閱讀 9096

h264中允許從多至15個幀裡面選擇1幀或者2幀出來作為參考進行**,所以必須引入乙個列表來管理這些參考影象,對

與p slice而言,對應 list0,對於 b slice 而言,還需要多乙個 list1,因為 b slice 是進行的兩次**!(乙個前向乙個後向/兩個前向/兩個後向)

參考幀分為 long term / short term 兩種,即所謂的長期參考幀和短期參考幀。其中長期參考幀用 longtermpicnum

來進行索引,而短期參考幀則利用 frame_num 或者 poc 來進行索引(預設索引順序即初始化順序),再具體一點:

p slice 的短期參考利用 frame_num 來進行索引,且按照降序排列(即離當前影象最近的前向影象排在第0位)

b slice 的短期參考利用 poc 來進行索引,

對其list0而言,先按照poc降序排列處於其前向的參考幀然後再按照poc公升序排列處於其後向的參考幀;

對其list1而言,先按照poc公升序排列處於其後向的參考幀然後再按照poc降序排列處於其前向的參考幀。

對於每個mb而言,在mb_pred()中會傳輸其參考索引,以表明該mb從list0/list1中選擇哪乙個作為參考,而對於乙個

slice 而言,可能存在該 slice 內部大多數mb都選擇了某乙個索引號較大的參考幀,如設定list0中的索引從0~5,而

大多數mb都選擇了5,在用哥倫布碼進行編碼時,將會消耗較多的bit!所以在初始化排序好後,會根據當前 slice 的

具體情況,對列表進行重排序,如將此時排在索引5位置的poc與排在0位置的poc進行交換,那麼mb_pred()中傳輸參考

索引所需的bit數就大大減少了!其中參考索引重排的語法在ref_pic_list_reordering()中有詳細介紹!

那麼當一幀解完後,如何處理該幀呢?需不需要將其放入參考列表中?所以在h264的bit stream中還傳輸了

dec_ref_pic_marking(),通過mmco這個玩意告訴我們當前的一幀接完後如何處理參考列表!

tbd:剩下的乙個問題就是,為什麼要分長期參考和短期參考呢?

以下是來自網上的答案,因為short term參考幀以frame_num做為索引,而frame_num是有最大值的,達到最大值後會進行

取模,所以短期參考幀不能長期存在於參考列表中,因為一旦frame_num達到最大值後取模為0,該索引就失去意義了,而長

期參考幀則不同!

H 264參考幀管理方法

h264中允許從多至15個幀裡面選擇1幀或者2幀出來作為參考進行 所以必須引入乙個列表來管理這些參考影象,對 與p slice而言,對應 list0,對於 b slice 而言,還需要多乙個 list1,因為 b slice 是進行的兩次 乙個前向乙個後向 兩個前向 兩個後向 參考幀分為 long ...

H 264參考幀管理

引言 h 264相對於以前的標準,採用了多參考幀的技術,提高了編碼器的效能,但也增加了實現的複雜度,在理解上也加大了難度。下面是我近來參閱一些資料的總結 frame num 標誌片的解碼順序,當前影象是idr 立即重新整理影象 時,設定為0 相對於前面乙個參考幀 解碼順序 增加1 poctype0 ...

H 264多參考幀

h264中允許從多至15個幀裡面選擇1幀或者2幀出來作為參考進行 所以必須引入乙個列表來管理這些參考影象,對與p slice而言,對應 list0,對於 b slice 而言,還需要多乙個 list1,因為 b slice 是進行的兩次 乙個前向乙個後向 兩個前向 兩個後向 參考幀分為 long t...