From d639dcdae022130078c9c84b7b691c5e9694786c Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Wed, 20 Jul 2016 18:02:23 +0200 Subject: ratecontrol: Move Xvid-related functions to the place they are actually used This will simplify the de-MpegEncContextualization. --- libavcodec/mpegvideo_enc.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'libavcodec/mpegvideo_enc.c') diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 4e0fae815f..d738d06ee6 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -60,6 +60,7 @@ #include "bytestream.h" #include "wmv2.h" #include "rv10.h" +#include "libxvid.h" #include #define QUANT_BIAS_SHIFT 8 @@ -871,9 +872,28 @@ FF_ENABLE_DEPRECATION_WARNINGS 31, 0); } +#if FF_API_RC_STRATEGY +FF_DISABLE_DEPRECATION_WARNINGS + if (!s->rc_strategy) + s->rc_strategy = s->avctx->rc_strategy; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (ff_rate_control_init(s) < 0) return -1; + if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == 1) { +#if CONFIG_LIBXVID + ret = ff_xvid_rate_control_init(s); +#else + ret = AVERROR(ENOSYS); + av_log(s->avctx, AV_LOG_ERROR, + "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n"); +#endif + if (ret < 0) + return ret; + } + #if FF_API_ERROR_RATE FF_DISABLE_DEPRECATION_WARNINGS if (avctx->error_rate) @@ -967,6 +987,10 @@ av_cold int ff_mpv_encode_end(AVCodecContext *avctx) int i; ff_rate_control_uninit(s); +#if CONFIG_LIBXVID + if ((avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == 1) + ff_xvid_rate_control_uninit(s); +#endif ff_mpv_common_end(s); if (CONFIG_MJPEG_ENCODER && @@ -3385,8 +3409,15 @@ static int estimate_qp(MpegEncContext *s, int dry_run){ s->current_picture.f->quality = s->next_lambda; if(!dry_run) s->next_lambda= 0; } else if (!s->fixed_qscale) { + int quality; +#if CONFIG_LIBXVID + if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == 1) + quality = ff_xvid_rate_estimate_qscale(s, dry_run); + else +#endif + quality = ff_rate_estimate_qscale(s, dry_run); s->current_picture_ptr->f->quality = - s->current_picture.f->quality = ff_rate_estimate_qscale(s, dry_run); + s->current_picture.f->quality = quality; if (s->current_picture.f->quality < 0) return -1; } -- cgit v1.2.3