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