]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
mb_lmin/max to limit the per mb quality for the ratecontrol independant from the...
authormichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Wed, 2 Feb 2005 19:33:48 +0000 (19:33 +0000)
committermichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Wed, 2 Feb 2005 19:33:48 +0000 (19:33 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@3928 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

ffmpeg.c
libavcodec/avcodec.h
libavcodec/ratecontrol.c
libavcodec/utils.c

index d92ac50714d724b8c25f8fb216620555135a40f6..f8ba68901e55d67d2808f1048dd2f9fe973d22c6 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -106,8 +106,8 @@ static int video_qmin = 2;
 static int video_qmax = 31;
 static int video_lmin = 2*FF_QP2LAMBDA;
 static int video_lmax = 31*FF_QP2LAMBDA;
-static int video_mb_qmin = 2;
-static int video_mb_qmax = 31;
+static int video_mb_lmin = 2*FF_QP2LAMBDA;
+static int video_mb_lmax = 31*FF_QP2LAMBDA;
 static int video_qdiff = 3;
 static int video_lelim = 0;
 static int video_celim = 0;
@@ -2490,7 +2490,7 @@ static void opt_lmin(const char *arg)
 static void opt_qmin(const char *arg)
 {
     video_qmin = atoi(arg);
-    if (video_qmin < 0 ||
+    if (video_qmin < 1 ||
         video_qmin > 31) {
         fprintf(stderr, "qmin must be >= 1 and <= 31\n");
         exit(1);
@@ -2500,29 +2500,29 @@ static void opt_qmin(const char *arg)
 static void opt_qmax(const char *arg)
 {
     video_qmax = atoi(arg);
-    if (video_qmax < 0 ||
+    if (video_qmax < 1 ||
         video_qmax > 31) {
         fprintf(stderr, "qmax must be >= 1 and <= 31\n");
         exit(1);
     }
 }
 
-static void opt_mb_qmin(const char *arg)
+static void opt_mb_lmin(const char *arg)
 {
-    video_mb_qmin = atoi(arg);
-    if (video_mb_qmin < 0 ||
-        video_mb_qmin > 31) {
-        fprintf(stderr, "qmin must be >= 1 and <= 31\n");
+    video_mb_lmin = atof(arg)*FF_QP2LAMBDA;
+    if (video_mb_lmin < 1 ||
+        video_mb_lmin > FF_LAMBDA_MAX) {
+        fprintf(stderr, "mblmin must be >= 1 and <= %d\n", FF_LAMBDA_MAX / FF_QP2LAMBDA);
         exit(1);
     }
 }
 
-static void opt_mb_qmax(const char *arg)
+static void opt_mb_lmax(const char *arg)
 {
-    video_mb_qmax = atoi(arg);
-    if (video_mb_qmax < 0 ||
-        video_mb_qmax > 31) {
-        fprintf(stderr, "qmax must be >= 1 and <= 31\n");
+    video_mb_lmax = atof(arg)*FF_QP2LAMBDA;
+    if (video_mb_lmax < 1 ||
+        video_mb_lmax > FF_LAMBDA_MAX) {
+        fprintf(stderr, "mblmax must be >= 1 and <= %d\n", FF_LAMBDA_MAX / FF_QP2LAMBDA);
         exit(1);
     }
 }
@@ -3227,8 +3227,8 @@ static void opt_output_file(const char *filename)
                 video_enc->rc_qsquish = video_qsquish;
                 video_enc->luma_elim_threshold = video_lelim;
                 video_enc->chroma_elim_threshold = video_celim;
-                video_enc->mb_qmin = video_mb_qmin;
-                video_enc->mb_qmax = video_mb_qmax;
+                video_enc->mb_lmin = video_mb_lmin;
+                video_enc->mb_lmax = video_mb_lmax;
                 video_enc->max_qdiff = video_qdiff;
                 video_enc->qblur = video_qblur;
                 video_enc->qcompress = video_qcomp;
@@ -3947,8 +3947,8 @@ const OptionDef options[] = {
     { "qmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qmax}, "max video quantiser scale (VBR)", "q" },
     { "lmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_lmin}, "min video lagrange factor (VBR)", "lambda" },
     { "lmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_lmax}, "max video lagrange factor (VBR)", "lambda" },
-    { "mbqmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_qmin}, "min macroblock quantiser scale (VBR)", "q" },
-    { "mbqmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_qmax}, "max macroblock quantiser scale (VBR)", "q" },
+    { "mblmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_lmin}, "min macroblock quantiser scale (VBR)", "q" },
+    { "mblmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_lmax}, "max macroblock quantiser scale (VBR)", "q" },
     { "qdiff", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qdiff}, "max difference between the quantiser scale (VBR)", "q" },
     { "qblur", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qblur}, "video quantiser scale blur (VBR)", "blur" },
     { "qsquish", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qsquish}, "how to keep quantiser between qmin and qmax (0 = clip, 1 = use differentiable function)", "squish" },
index ebb27e536c77af398b5bd009955facc8e626701c..826b227df52a6fee9c5c926b53723e9c86d76d81 100644 (file)
@@ -17,7 +17,7 @@ extern "C" {
 
 #define FFMPEG_VERSION_INT     0x000409
 #define FFMPEG_VERSION         "0.4.9-pre1"
-#define LIBAVCODEC_BUILD       4741
+#define LIBAVCODEC_BUILD       4742
 
 #define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
 #define LIBAVCODEC_VERSION     FFMPEG_VERSION
@@ -1276,14 +1276,14 @@ typedef struct AVCodecContext {
     
     /**
      * minimum MB quantizer.
-     * - encoding: set by user.
+     * - encoding: unused
      * - decoding: unused
      */
     int mb_qmin;
 
     /**
      * maximum MB quantizer.
-     * - encoding: set by user.
+     * - encoding: unused
      * - decoding: unused
      */
     int mb_qmax;
@@ -1758,6 +1758,20 @@ typedef struct AVCodecContext {
      * - decoding: unused
      */
     float border_masking;
+
+    /**
+     * minimum MB lagrange multipler.
+     * - encoding: set by user.
+     * - decoding: unused
+     */
+    int mb_lmin;
+
+    /**
+     * maximum MB lagrange multipler.
+     * - encoding: set by user.
+     * - decoding: unused
+     */
+    int mb_lmax;
 } AVCodecContext;
 
 
index 04f1e5bc80b0f9e1d44ab1def66e51ebe382a4f1..19641d453d6002fd9f43ec005bf10f9b50642609 100644 (file)
@@ -506,8 +506,8 @@ static void adaptive_quantization(MpegEncContext *s, double q){
     float cplx_sum= 0.0;
     float cplx_tab[s->mb_num];
     float bits_tab[s->mb_num];
-    const int qmin= s->avctx->lmin;
-    const int qmax= s->avctx->lmax;
+    const int qmin= s->avctx->mb_lmin;
+    const int qmax= s->avctx->mb_lmax;
     Picture * const pic= &s->current_picture;
     const int mb_width = s->mb_width;
     const int mb_height = s->mb_height;
index d7a7ed464bc48d87fbe76ac1c7c878d3b00f479f..99de9d38c60bacb5225fddc6b0e318080bc2e170 100644 (file)
@@ -430,8 +430,8 @@ void avcodec_get_context_defaults(AVCodecContext *s){
     s->bit_rate_tolerance= s->bit_rate*10;
     s->qmin= 2;
     s->qmax= 31;
-    s->mb_qmin= 2;
-    s->mb_qmax= 31;
+    s->mb_lmin= FF_QP2LAMBDA * 2;
+    s->mb_lmax= FF_QP2LAMBDA * 31;
     s->rc_eq= "tex^qComp";
     s->qcompress= 0.5;
     s->max_qdiff= 3;