mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
ratecontrol: Move Xvid-related functions to the place they are actually used
This will simplify the de-MpegEncContextualization.
This commit is contained in:
parent
44972e227d
commit
d639dcdae0
@ -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 */
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user