H 264多參考幀

2021-06-21 17:09:12 字數 1127 閱讀 7483

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

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

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,該索引就失去意義了,而長 

期參考幀則不同! 

H264多參考幀個數考慮

一般的h264 碼流以 2個參考幀居多,從mediainfo 中可以看到 format setting reframes 2frames。個人理解這個引數是指乙個gop中參考幀的個數,比如說,是否是p幀只參考前面的i 幀與相鄰的p幀。參考幀的個數有多少,我們就需要有多少個解碼buffer count...

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 ...