diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-10-18 14:06:15 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-10-18 14:06:15 +0200 |
commit | ec8f56efad2c1a150e822f6b11c54915446a2d09 (patch) | |
tree | cdca1d57f0be58bd8dcb922344d9fc7559151c62 /libavcodec | |
parent | 17a065cf204fb626b6940b1bc3df5d6ab9f4a468 (diff) | |
parent | a75c2eb25a62105c09b48521aef429dc8a231637 (diff) | |
download | ffmpeg-ec8f56efad2c1a150e822f6b11c54915446a2d09.tar.gz |
Merge commit 'a75c2eb25a62105c09b48521aef429dc8a231637'
* commit 'a75c2eb25a62105c09b48521aef429dc8a231637':
lavc: make rc_eq into private options of mpegvideo encoders
Conflicts:
libavcodec/options_table.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/avcodec.h | 7 | ||||
-rw-r--r-- | libavcodec/mpegvideo.h | 9 | ||||
-rw-r--r-- | libavcodec/mpegvideo_enc.c | 7 | ||||
-rw-r--r-- | libavcodec/options.c | 11 | ||||
-rw-r--r-- | libavcodec/options_table.h | 8 | ||||
-rw-r--r-- | libavcodec/ratecontrol.c | 6 |
6 files changed, 35 insertions, 13 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 9b6a0bf0d9..f9d817593d 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2299,12 +2299,13 @@ typedef struct AVCodecContext { int rc_override_count; RcOverride *rc_override; +#if FF_API_MPV_OPT /** - * rate control equation - * - encoding: Set by user - * - decoding: unused + * @deprecated use encoder private options instead */ + attribute_deprecated const char *rc_eq; +#endif /** * maximum bitrate diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 7e3d35c50b..d3e6c79692 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -660,6 +660,8 @@ typedef struct MpegEncContext { float rc_qmod_amp; int rc_qmod_freq; + char *rc_eq; + /* temp buffers for rate control */ float *cplx_tab, *bits_tab; @@ -708,7 +710,12 @@ typedef struct MpegEncContext { {"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \ FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ {"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ -{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, +{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ +{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \ + "defined in the section 'Expression Evaluation', the following functions are available: " \ + "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ + "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ + FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, extern const AVOption ff_mpv_generic_options[]; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 76fb65480f..83c2b6831f 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -958,6 +958,13 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) s->rc_qmod_amp = avctx->rc_qmod_amp; if (avctx->rc_qmod_freq) s->rc_qmod_freq = avctx->rc_qmod_freq; + + if (avctx->rc_eq) { + av_freep(&s->rc_eq); + s->rc_eq = av_strdup(avctx->rc_eq); + if (!s->rc_eq) + return AVERROR(ENOMEM); + } FF_ENABLE_DEPRECATION_WARNINGS #endif diff --git a/libavcodec/options.c b/libavcodec/options.c index 5d818a2031..c4ee234766 100644 --- a/libavcodec/options.c +++ b/libavcodec/options.c @@ -27,6 +27,7 @@ #include "avcodec.h" #include "internal.h" #include "libavutil/avassert.h" +#include "libavutil/internal.h" #include "libavutil/mem.h" #include "libavutil/opt.h" #include <float.h> /* FLT_MIN, FLT_MAX */ @@ -200,17 +201,21 @@ int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src) dest->internal = NULL; /* reallocate values that should be allocated separately */ - dest->rc_eq = NULL; dest->extradata = NULL; dest->intra_matrix = NULL; dest->inter_matrix = NULL; dest->rc_override = NULL; dest->subtitle_header = NULL; +#if FF_API_MPV_OPT + FF_DISABLE_DEPRECATION_WARNINGS + dest->rc_eq = NULL; if (src->rc_eq) { dest->rc_eq = av_strdup(src->rc_eq); if (!dest->rc_eq) return AVERROR(ENOMEM); } + FF_ENABLE_DEPRECATION_WARNINGS +#endif #define alloc_and_copy_or_fail(obj, size, pad) \ if (src->obj && size > 0) { \ @@ -237,7 +242,11 @@ fail: av_freep(&dest->intra_matrix); av_freep(&dest->inter_matrix); av_freep(&dest->extradata); +#if FF_API_MPV_OPT + FF_DISABLE_DEPRECATION_WARNINGS av_freep(&dest->rc_eq); + FF_ENABLE_DEPRECATION_WARNINGS +#endif return AVERROR(ENOMEM); } diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index 797f6de781..a9cc5cd4a3 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -180,11 +180,9 @@ static const AVOption avcodec_options[] = { {"rc_qmod_freq", "deprecated, use encoder private options instead", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, #endif {"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, -{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " - "defined in the section 'Expression Evaluation', the following functions are available: " - "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " - "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", - OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, V|E}, +#if FF_API_MPV_OPT +{"rc_eq", "deprecated, use encoder private options instead", OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, V|E}, +#endif {"maxrate", "maximum bitrate (in bits/s). Used for VBV together with bufsize.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|A|E}, {"minrate", "minimum bitrate (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise.", OFFSET(rc_min_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 78f4db3ca7..9c1ad2e7dd 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -138,11 +138,11 @@ av_cold int ff_rate_control_init(MpegEncContext *s) } res = av_expr_parse(&rcc->rc_eq_eval, - s->avctx->rc_eq ? s->avctx->rc_eq : "tex^qComp", + s->rc_eq ? s->rc_eq : "tex^qComp", const_names, func1_names, func1, NULL, NULL, 0, s->avctx); if (res < 0) { - av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", s->avctx->rc_eq); + av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", s->rc_eq); return res; } @@ -399,7 +399,7 @@ static double get_qscale(MpegEncContext *s, RateControlEntry *rce, bits = av_expr_eval(rcc->rc_eq_eval, const_values, rce); if (isnan(bits)) { - av_log(s->avctx, AV_LOG_ERROR, "Error evaluating rc_eq \"%s\"\n", s->avctx->rc_eq); + av_log(s->avctx, AV_LOG_ERROR, "Error evaluating rc_eq \"%s\"\n", s->rc_eq); return -1; } |