x264提供三级码控基本单位:帧级,行级,宏块级
帧级
定位:帧类型决策之后,帧实际编码之前
主控函数:x264_ratecontrol_start()
进行帧级qp控制
- 关键函数1:rate_estimate_qscale()
用于根据当前实际使用的比特开销来确定当前帧的qscale - 关键函数2:clip_qscale()
用于对得到的qscale进行clip,并进行vbv检验 - 辅助函数1:qp2qscale()/qscale2qp()
用于qp和qscale之间进行转换 - 辅助函数2:predict_size()/predict_row_size() / update_predictor()
用于根据satd来估计bits
行级
关键函数1:x264_ratecontrol_mb_qp()
在编码每个宏块前都会使用该函数得到编码的qp
关键函数2:
宏块级
主控函数:macroblock_tree()
进行宏块树计算
- 关键函数1:macroblock_tree_propagate()
用于计算帧b的propagate_cost,并瓜分到其参考帧中,若是参考帧则将propagate_cost变现为qp_offset - 关键函数2:mbtree_propagate_cost()
用于计算宏块的propagate_cost - 关键函数3:mbtree_propagate_list()
用于将propagate_cost瓜分到参考帧中 - 关键函数4:macroblock_tree_finish()
用于将计算得到的propagate_cost变现成qp_offset,仅限于参考帧