openh264碼控筆記二(幀級QP的計算)
阿新 • • 發佈:2018-12-26
以下都是RC_BITRATE_MODE模式的處理流程。
一、幀級碼控計算整體框架圖
二、幀級QP的計算公式
openh264用的碼控用的是R-Q模型,使用歷史幀的平均QP、SAD、幀長,來預測當前幀的QP。計算公式如下:
QStep = (IntraComplexity * CmplxRatio)/(TargetBits * 100)
IntraComplexity引數根據上一幀單幀長度和歷史幀平均QP確定。
計算公式為:IntraComplexity(i)=0.8*IntraComplexity(i-1)+0.2*QStep*FrameDqBits
CmplxRatio引數根據歷史幀的SAD(絕對殘差和)確定。
計算公式為:CmplxRatio(i)=0.8*SAD(i-1)+0.2*SAD(i)
TargetBits當前幀可分配的位元速率。
1)IntraComplexity引數計算
RcUpdateIntraComplexity (sWelsEncCtx* pEncCtx)
RcUpdateFrameComplexity (sWelsEncCtx* pEncCtx)
2)CmplxRatio引數計算
RcCalculateIdrQp (sWelsEncCtx* pEncCtx)
RcCalculatePictureQp (sWelsEncCtx* pEncCtx)
3)TargetBits引數計算
RcDecideTargetBits (sWelsEncCtx* pEncCtx)函式
另外WelsRcPictureInitGom實際計算幀級QP的值。WelsRcPictureInfoUpdateGom更新碼控的引數,用於後續再次呼叫WelsRcPictureInitGom時,計算幀級QP的值。