源码分析系列(四)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

 

posted @ 2017-07-18 10:48  STN_LCD  阅读(320)  评论(0编辑  收藏  举报