/*
得到当前待编码宏块的qp
过程:
1.取之前帧级码控决定的qp
2.计算当前宏块的qp,若使用adaptive qp
·若是参考帧,则 宏块qp = 帧级qp + qp_offset[mb_index]
·若非参考帧,则 宏块qp = 帧级qp + qp_offset_aq[mb_index]
3.clip宏块级qp
*/
int x264_ratecontrol_mb_qp( x264_t *h )
{
x264_emms();
//取之前帧级码控决定的qp值
float qp = h->rc->qpm;
/* 若使用了adaptive qp,则各个宏块的qp值可以不一致,
每个宏块的qp = 帧级qp + qp_offset[i_mb_xy] */
if( h->param.rc.i_aq_mode )
{
/* MB-tree currently doesn't adjust quantizers in unreferenced frames.
宏块树目前还不能调整非参考帧的量化器,所以
若是参考帧,则使用qp offset
若非参考帧,则使用qp_aq offset
*/
float qp_offset = h->fdec->b_kept_as_ref ? h->fenc->f_qp_offset[h->mb.i_mb_xy] : h->fenc->f_qp_offset_aq[h->mb.i_mb_xy];
/* Scale AQ's effect towards zero in emergency mode. */
if( qp > QP_MAX_SPEC ) //协议定的qp上限,8bit为51
qp_offset *= (QP_MAX - qp) / (QP_MAX - QP_MAX_SPEC);
qp += qp_offset;
}
return x264_clip3( qp + 0.5f, h->param.rc.i_qp_min, h->param.rc.i_qp_max );
}
码控-x264_ratecontrol_mb_qp()
最新推荐文章于 2024-06-07 12:08:42 发布