碼控-x264_ratecontrol_mb_qp()

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