[FFmpeg-cvslog] lavc: make lmax/lmin into private options of mpegvideo encoders

Anton Khirnov git at videolan.org
Sat Oct 18 20:12:48 CEST 2014


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Oct 27 13:51:16 2013 +0100| [530c1441fd1426b6a4bb33485ff3226e1ae0ad45] | committer: Anton Khirnov

lavc: make lmax/lmin into private options of mpegvideo encoders

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=530c1441fd1426b6a4bb33485ff3226e1ae0ad45
---

 libavcodec/avcodec.h       |   12 ++++++------
 libavcodec/mpegvideo.h     |    3 +++
 libavcodec/mpegvideo_enc.c |    6 +++++-
 libavcodec/options_table.h |    6 ++++--
 libavcodec/ratecontrol.c   |    4 ++--
 5 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 1734370..b3c6419 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2183,19 +2183,19 @@ typedef struct AVCodecContext {
      */
     int context_model;
 
+#if FF_API_MPV_OPT
     /**
-     * minimum Lagrange multipler
-     * - encoding: Set by user.
-     * - decoding: unused
+     * @deprecated use encoder private options instead
      */
+    attribute_deprecated
     int lmin;
 
     /**
-     * maximum Lagrange multipler
-     * - encoding: Set by user.
-     * - decoding: unused
+     * @deprecated use encoder private options instead
      */
+    attribute_deprecated
     int lmax;
+#endif
 
     /**
      * frame skip threshold
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index c83fbb6..35ea5b1 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -640,6 +640,7 @@ typedef struct MpegEncContext {
     float rc_initial_cplx;
     float rc_buffer_aggressivity;
     float border_masking;
+    int lmin, lmax;
 
     char *rc_eq;
 
@@ -700,6 +701,8 @@ typedef struct MpegEncContext {
 {"rc_init_cplx", "initial complexity for 1-pass encoding",          FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS},       \
 {"rc_buf_aggressivity", "currently useless",                        FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \
 {"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS},    \
+{"lmin", "minimum Lagrange factor (VBR)",                           FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 =  2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS },            \
+{"lmax", "maximum Lagrange factor (VBR)",                           FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS },            \
 
 extern const AVOption ff_mpv_generic_options[];
 
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 6bb4eeb..bb612d6 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -834,6 +834,10 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
         s->rc_buffer_aggressivity = avctx->rc_buffer_aggressivity;
     if (avctx->rc_initial_cplx != 0.0)
         s->rc_initial_cplx = avctx->rc_initial_cplx;
+    if (avctx->lmin)
+        s->lmin = avctx->lmin;
+    if (avctx->lmax)
+        s->lmax = avctx->lmax;
 
     if (avctx->rc_eq) {
         av_freep(&s->rc_eq);
@@ -1621,7 +1625,7 @@ vbv_retry:
             int max_size = rcc->buffer_index * avctx->rc_max_available_vbv_use;
 
             if (put_bits_count(&s->pb) > max_size &&
-                s->lambda < s->avctx->lmax) {
+                s->lambda < s->lmax) {
                 s->next_lambda = FFMAX(s->lambda + 1, s->lambda *
                                        (s->qscale + 1) / s->qscale);
                 if (s->adaptive_quant) {
diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
index bb6db55..2cf82e6 100644
--- a/libavcodec/options_table.h
+++ b/libavcodec/options_table.h
@@ -310,8 +310,10 @@ static const AVOption avcodec_options[] = {
 {"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"},
 {"stream_codec_tag", NULL, OFFSET(stream_codec_tag), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 {"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"lmin", "minimum Lagrange factor (VBR)", OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 =  2*FF_QP2LAMBDA }, 0, INT_MAX, V|E},
-{"lmax", "maximum Lagrange factor (VBR)", OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, V|E},
+#if FF_API_MPV_OPT
+{"lmin", "deprecated, use encoder private options instead", OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 =  0 }, 0, INT_MAX, V|E},
+{"lmax", "deprecated, use encoder private options instead", OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 =  0 }, 0, INT_MAX, V|E},
+#endif
 {"nr", "noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
 {"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
 {"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, V|A|E|D, "flags2"},
diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c
index 84b8474..e18878d 100644
--- a/libavcodec/ratecontrol.c
+++ b/libavcodec/ratecontrol.c
@@ -460,8 +460,8 @@ static double get_diff_limited_q(MpegEncContext *s, RateControlEntry *rce, doubl
  */
 static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type)
 {
-    int qmin = s->avctx->lmin;
-    int qmax = s->avctx->lmax;
+    int qmin = s->lmin;
+    int qmax = s->lmax;
 
     assert(qmin <= qmax);
 



More information about the ffmpeg-cvslog mailing list