[FFmpeg-devel] [PATCH 3/3] merge compute initialQP sections

Agatha Hu ahu at nvidia.com
Fri Sep 11 11:32:34 CEST 2015


---
 libavcodec/nvenc.c |  101 ++++++++++++++++++++++------------------------------
 1 file changed, 42 insertions(+), 59 deletions(-)

diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index fd90f7b..57aae33 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -800,69 +800,52 @@ static av_cold int nvenc_encode_init(AVCodecContext *avctx)
 
         avctx->qmin = -1;
         avctx->qmax = -1;
-    } else if (avctx->qmin >= 0 && avctx->qmax >= 0) {
-        if (ctx->twopass == 1) {
-            ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_2_PASS_VBR;
-
-            if (avctx->codec->id == AV_CODEC_ID_H264) {
-                ctx->encode_config.encodeCodecConfig.h264Config.adaptiveTransformMode = NV_ENC_H264_ADAPTIVE_TRANSFORM_ENABLE;
-                ctx->encode_config.encodeCodecConfig.h264Config.fmoMode = NV_ENC_H264_FMO_DISABLE;
-            }
-        } else {
-            ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_VBR_MINQP;
-        }
-
-        ctx->encode_config.rcParams.enableMinQP = 1;
-        ctx->encode_config.rcParams.enableMaxQP = 1;
-
-        ctx->encode_config.rcParams.minQP.qpInterB = avctx->qmin;
-        ctx->encode_config.rcParams.minQP.qpInterP = avctx->qmin;
-        ctx->encode_config.rcParams.minQP.qpIntra = avctx->qmin;
-
-        ctx->encode_config.rcParams.maxQP.qpInterB = avctx->qmax;
-        ctx->encode_config.rcParams.maxQP.qpInterP = avctx->qmax;
-        ctx->encode_config.rcParams.maxQP.qpIntra = avctx->qmax;
-        
-        {
-            uint32_t qpInterP = (avctx->qmax + 3*avctx->qmin)/4; // biased towards Qmin
-            ctx->encode_config.rcParams.initialRCQP.qpInterP  = qpInterP;
-            if(avctx->i_quant_factor != 0.0 && avctx->b_quant_factor != 0.0) {
-                ctx->encode_config.rcParams.initialRCQP.qpIntra = qpInterP * fabs(avctx->i_quant_factor);
-                ctx->encode_config.rcParams.initialRCQP.qpIntra += qpInterP * (avctx->i_quant_offset);
-                ctx->encode_config.rcParams.initialRCQP.qpInterB = qpInterP * fabs(avctx->b_quant_factor);
-                ctx->encode_config.rcParams.initialRCQP.qpInterB += qpInterP * (avctx->b_quant_offset);
-            } else {
-                ctx->encode_config.rcParams.initialRCQP.qpIntra = qpInterP;
-                ctx->encode_config.rcParams.initialRCQP.qpInterB = qpInterP;
-            }
-        }
-        ctx->encode_config.rcParams.enableInitialRCQP = 1;       
     } else {
-        if (ctx->twopass < 1) {
-            ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_VBR;
-        } else {
-            ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_2_PASS_VBR;
+        uint32_t qpInterP = 26; // default to 26
+        if (avctx->qmin >= 0 && avctx->qmax >= 0) { 
+            ctx->encode_config.rcParams.enableMinQP = 1;
+            ctx->encode_config.rcParams.enableMaxQP = 1;
+
+            ctx->encode_config.rcParams.minQP.qpInterB = avctx->qmin;
+            ctx->encode_config.rcParams.minQP.qpInterP = avctx->qmin;
+            ctx->encode_config.rcParams.minQP.qpIntra = avctx->qmin;
+
+            ctx->encode_config.rcParams.maxQP.qpInterB = avctx->qmax;
+            ctx->encode_config.rcParams.maxQP.qpInterP = avctx->qmax;
+            ctx->encode_config.rcParams.maxQP.qpIntra = avctx->qmax;
+            qpInterP = (avctx->qmax + 3*avctx->qmin)/4; // biased towards Qmin
+            
+            if (ctx->twopass == 1) {
+                ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_2_PASS_VBR;
+                if (avctx->codec->id == AV_CODEC_ID_H264) {
+                    ctx->encode_config.encodeCodecConfig.h264Config.adaptiveTransformMode = NV_ENC_H264_ADAPTIVE_TRANSFORM_ENABLE;
+                    ctx->encode_config.encodeCodecConfig.h264Config.fmoMode = NV_ENC_H264_FMO_DISABLE;
+                }
+            } else {
+                ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_VBR_MINQP;
+            } 
         }
-
-        {
-            uint32_t qpInterP = 26; // default to 26
-            ctx->encode_config.rcParams.initialRCQP.qpInterP  = qpInterP;
-
-            if(avctx->i_quant_factor != 0.0 && avctx->b_quant_factor != 0.0) {
-
-                ctx->encode_config.rcParams.initialRCQP.qpIntra = qpInterP * fabs(avctx->i_quant_factor);
-                ctx->encode_config.rcParams.initialRCQP.qpIntra += qpInterP * (avctx->i_quant_offset);
-
-                ctx->encode_config.rcParams.initialRCQP.qpInterB = qpInterP * fabs(avctx->b_quant_factor);
-                ctx->encode_config.rcParams.initialRCQP.qpInterB += qpInterP * (avctx->b_quant_offset);
+        else {       
+            if (ctx->twopass < 1) {
+                ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_VBR;
             } else {
-                ctx->encode_config.rcParams.initialRCQP.qpIntra = qpInterP;
-                ctx->encode_config.rcParams.initialRCQP.qpInterB = qpInterP;
-            }
+                ctx->encode_config.rcParams.rateControlMode = NV_ENC_PARAMS_RC_2_PASS_VBR;
+            }       
         }
-        ctx->encode_config.rcParams.enableInitialRCQP = 1;
-    }
-
+        
+        ctx->encode_config.rcParams.enableInitialRCQP = 1;    
+        ctx->encode_config.rcParams.initialRCQP.qpInterP  = qpInterP;
+        if(avctx->i_quant_factor != 0.0 && avctx->b_quant_factor != 0.0) {
+            ctx->encode_config.rcParams.initialRCQP.qpIntra = qpInterP * fabs(avctx->i_quant_factor);
+            ctx->encode_config.rcParams.initialRCQP.qpIntra += qpInterP * (avctx->i_quant_offset);
+            ctx->encode_config.rcParams.initialRCQP.qpInterB = qpInterP * fabs(avctx->b_quant_factor);
+            ctx->encode_config.rcParams.initialRCQP.qpInterB += qpInterP * (avctx->b_quant_offset);
+        } else {
+            ctx->encode_config.rcParams.initialRCQP.qpIntra = qpInterP;
+            ctx->encode_config.rcParams.initialRCQP.qpInterB = qpInterP;
+        }          
+    } 
+    
     if (avctx->rc_buffer_size > 0)
         ctx->encode_config.rcParams.vbvBufferSize = avctx->rc_buffer_size;
 
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list