在學習x264
過程中的一些筆記、參考啦大量書上網上的資料、非常感謝就不一一枚舉啦
:):)
原始碼有的來自最新用git拿到的x264最新原始碼、有的來自有windowsvs工程的老版本(網上有很多中文分析)
【幀級編碼】
main->encode->encode_frame->x264_encoder_encode
【待編碼幀管理】
gop順序:調整b幀-i幀p幀順序(如有b幀)
unused(記憶體塊**池)/next(未處理過將要被處理的幀、處理後放入curerent)/current(已處理過即將被編碼的幀)
從unused拿乙個記憶體塊->fenc
pic_in拷貝到fenc,對fenc進行大小調整(16的整數倍),處理後的fenc放入next
(如果有b幀)調整調整b幀-i幀p幀順序、放進current;(如果沒有b幀)直接從next中取一幀放進current
再從current中拿出一幀到fenc並開始編碼 。
【參考幀管理】
參考幀都是已編碼幀的重構幀;(幾乎)每乙個已編碼幀都會被重構-放進參考幀佇列(除非已知該幀不用作參考)
參考幀佇列:x264_t.reference,x264_t.fref0/fref1
整理上述參考幀佇列:x264_reference_build_list, x264_reference_update
【片級編碼】
x264_slice_write
【x264_slice_write】
【巨集塊級編碼】
x264_macroblock_analyse x264_macroblock_encode
【x264_macroblock_analyse】
//處理slice_type_i
if( h->sh.i_type == slice_type_i )
//幀內分析
x264_mb_analyse_intra(h, &analysis, cost_max );
//處理slice_type_p
else
if( h->sh.i_type ==slice_type_p )
//先判別是否p_skip
b_skip =x264_macroblock_probe_pskip( h );
//如果是否p_skip
if( b_skip )
h->mb.i_type = p_skip;
h->mb.i_partition= d_16x16;
//如果不是否p_skip
else
//幀間分析
x264_mb_analyse_inter_p16x16( h, &analysis );
【x264_macroblock_encode】
【重要資料結構】
【率控分析】
【引數設定】
【多執行緒分析】
x264原始碼分析 overscan
引數解析 opt overscan b error parse enum value,x264 overscan names,p vui.i overscan 引數含義 影象在放大的時候邊緣容易變形,overscan,可以將變形的邊界顯示到視窗外面,讓 的人看起來是畫面放大後是正常的。sps vui...
x264原始碼分析 chromaloc引數
引數含義 設定色度取樣位置。引數解析 opt chromaloc 值從0到5。參考 a blob f doc vui.txt 建議 如果正確的從 mpeg1 比如 vcd 的 4 2 0 格式二次取樣轉碼,且不做任何色彩空間轉換,應該設為1。如果正確的從 mpeg2 比如 的 4 2 0 格式二次取...
x264原始碼分析 引數intra refresh
引數含義 intra refresh 是否要把i幀平攤到多個p幀的intra 巨集塊中傳輸。意思就是除了第乙個idr,後面都沒有idr 然後每個p幀中有幾列是幀內參考的,乙個gop內所有的幀內參考組合起來就是乙個完整的幀。引數解析 opt intra refresh p b intra refres...