源碼分析系列(四)x264_nal_dataflow
http://www.cnblogs.com/xkfz007/articles/2616158.html
NAL部分關鍵函數
4.1 int x264_nal_encode( void *, int *, int b_annexeb, x264_nal_t *nal )
功能
對一個片進行NAL編碼。
輸入項目
一個片的RBSP的數據流。
輸出項目
一個NAL單元。
算法
從SODB到RBSP的生成過程:
如果SODB內容是空,生成的RBSP也是空的。
否則,RBSP由如下的方式產生:
RBSP的第一個字節直接取自SODB的第1~8個比特(RBSP字節內的比特按照從左到右對應為從高到低的順序排列,most significant),依此類推,RBSP的其余的每個字節都直接取自SODB的相應比特。RBSP的最後一個字節包含SODB的最後幾個比特,及如下的rbsp_trailing_bits()。
Rbsp_trailing_bits()的第一個比特是1,接下來填充0,直到字節對齊。
最後添加若幹個cabac_zero_word(其值等於0x0000)。
4.2 int x264_nal_decode( x264_nal_t *nal, void *, int )
功能
對一個片進行NAL解碼。
輸入項目
一個NAL單元。
輸出項目
一個片的RBSP的數據流。
程序邏輯
如附圖12所示:
附圖12: x264_nal_decode流程圖
4.3 static void x264_nal_start( x264_t *h, int i_type, int i_ref_idc )
功能
初使化nal的結構:設置nal的優先級i_ref_idc,設置nal單元的類型i_type,使nal->p_payload指向h->out.p_bitstream。
輸入項目
x264_t *h
輸出項目
x264_t *h
4.4 Int x264_ratecontrol_new( x264_t *h )
功能
(1)開始碼率控制,設置碼率控制的參數的初始值;
(2)設置輸出緩沖區的參數;
(3)根據碼率以及幀率調整qp的值。
輸入項目
x264_t *h
輸出項目
x264_t *h
程序邏輯
如附圖13所示:
附圖13: x264_ratecontrol_new流程圖
分類: X264
源碼分析系列(四)x264_nal_dataflow