diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2005-02-02 19:33:48 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2005-02-02 19:33:48 +0000 |
commit | 6e0d8c06c7af61859e8d7bc2351a607d8abeab75 (patch) | |
tree | a2046b84143a0191ff3b998ab985c7c54be437aa | |
parent | 957c743a23881636dcc1da307ad9c4ac6b65f7ac (diff) | |
download | ffmpeg-6e0d8c06c7af61859e8d7bc2351a607d8abeab75.tar.gz |
mb_lmin/max to limit the per mb quality for the ratecontrol independant from the frame limits
Originally committed as revision 3928 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | ffmpeg.c | 36 | ||||
-rw-r--r-- | libavcodec/avcodec.h | 20 | ||||
-rw-r--r-- | libavcodec/ratecontrol.c | 4 | ||||
-rw-r--r-- | libavcodec/utils.c | 4 |
4 files changed, 39 insertions, 25 deletions
@@ -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" }, diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index ebb27e536c..826b227df5 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -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; diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 04f1e5bc80..19641d453d 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -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; diff --git a/libavcodec/utils.c b/libavcodec/utils.c index d7a7ed464b..99de9d38c6 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -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; |