diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2016-07-20 19:02:23 +0300 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2016-07-20 19:59:36 +0300 |
commit | d639dcdae022130078c9c84b7b691c5e9694786c (patch) | |
tree | 9eadc97d19f4d2f08775fe49e8177d91cb986eaa | |
parent | 44972e227df0f7ad5aa9004d971fb54e9dc5c849 (diff) |
ratecontrol: Move Xvid-related functions to the place they are actually used
This will simplify the de-MpegEncContextualization.
-rw-r--r-- | libavcodec/libxvid.h | 7 | ||||
-rw-r--r-- | libavcodec/mpegvideo_enc.c | 33 | ||||
-rw-r--r-- | libavcodec/ratecontrol.c | 28 | ||||
-rw-r--r-- | libavcodec/ratecontrol.h | 4 |
4 files changed, 39 insertions, 33 deletions
diff --git a/libavcodec/libxvid.h b/libavcodec/libxvid.h index 15f908f6f5..4535898530 100644 --- a/libavcodec/libxvid.h +++ b/libavcodec/libxvid.h @@ -28,4 +28,11 @@ int ff_tempfile(const char *prefix, char **filename); +struct MpegEncContext; + +/* rate control */ +int ff_xvid_rate_control_init(struct MpegEncContext *s); +void ff_xvid_rate_control_uninit(struct MpegEncContext *s); +float ff_xvid_rate_estimate_qscale(struct MpegEncContext *s, int dry_run); + #endif /* AVCODEC_LIBXVID_H */ 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 <limits.h> #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; } diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index fc65e6cbd9..7e604b1efb 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -110,13 +110,6 @@ av_cold int ff_rate_control_init(MpegEncContext *s) return res; } -#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 - for (i = 0; i < 5; i++) { rcc->pred[i].coeff = FF_QP2LAMBDA * 7.0; rcc->pred[i].count = 1.0; @@ -198,17 +191,6 @@ FF_ENABLE_DEPRECATION_WARNINGS ff_rate_control_uninit(s); return -1; } - - // FIXME maybe move to end - if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == 1) { -#if CONFIG_LIBXVID - return ff_xvid_rate_control_init(s); -#else - av_log(s->avctx, AV_LOG_ERROR, - "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n"); - return -1; -#endif - } } if (!(s->avctx->flags & AV_CODEC_FLAG_PASS2)) { @@ -278,11 +260,6 @@ av_cold void ff_rate_control_uninit(MpegEncContext *s) av_expr_free(rcc->rc_eq_eval); av_freep(&rcc->entry); - -#if CONFIG_LIBXVID - if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == 1) - ff_xvid_rate_control_uninit(s); -#endif } int ff_vbv_update(MpegEncContext *s, int frame_size) @@ -723,11 +700,6 @@ float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run) Picture * const pic = &s->current_picture; emms_c(); -#if CONFIG_LIBXVID - if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == 1) - return ff_xvid_rate_estimate_qscale(s, dry_run); -#endif - get_qminmax(&qmin, &qmax, s, pict_type); fps = 1 / av_q2d(s->avctx->time_base); diff --git a/libavcodec/ratecontrol.h b/libavcodec/ratecontrol.h index da39af7956..2976806c8e 100644 --- a/libavcodec/ratecontrol.h +++ b/libavcodec/ratecontrol.h @@ -95,8 +95,4 @@ void ff_rate_control_uninit(struct MpegEncContext *s); int ff_vbv_update(struct MpegEncContext *s, int frame_size); void ff_get_2pass_fcode(struct MpegEncContext *s); -int ff_xvid_rate_control_init(struct MpegEncContext *s); -void ff_xvid_rate_control_uninit(struct MpegEncContext *s); -float ff_xvid_rate_estimate_qscale(struct MpegEncContext *s, int dry_run); - #endif /* AVCODEC_RATECONTROL_H */ |