目的
x264_ratecontrol_mb调用发生在宏块编码之后,如果开启了AQ,则在AQ之后,由slice_write调用,从函数名称看,是用于宏块级码率控制,但是它与调用宏块QP没有直接的关系,该函数的主要目的由两个:
- 更新rc->qpa_aq和rc->qpa_rc的值
rc->qpa_aq为当前slice目前宏块编码后设置的QP值之后,此QP值为AQ之后的QP值。
rc->qpa_rc和rc_qpa_aq的含义类似,只是它表示AQ之前的QP值,若没有开启AQ功能,则二者的值一样。
其中rc->qpa_rc给下一帧的帧级码率控制使用,通过rc->qpa_rc做复杂度估计;rc ->qpa_aq的主要用于2pass编码,如果是1pass编码,rc->qpa_aq不起任何作用。
- 更新预测器系数(predictor)
调用update_predictor函数实现,x264认为qscale(aq之前的QP对应的qscale)和satd,和实际产生的bits成线性关系,用公式表示即为: