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,僅限於參考幀