/*
得到當前待編碼宏塊的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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.