x264源碼的小小分析:):)

在學習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

 

【重要數據結構】

 

【率控分析】

 

【參數設定】

 

【多線程分析】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值