mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
Merge commit 'd639dcdae022130078c9c84b7b691c5e9694786c'
* commit 'd639dcdae022130078c9c84b7b691c5e9694786c': ratecontrol: Move Xvid-related functions to the place they are actually used Merged-by: Clément Bœsch <u@pkh.me>
This commit is contained in:
commit
566bfd59c9
@ -26,4 +26,11 @@
|
||||
* common functions for use with the Xvid wrappers
|
||||
*/
|
||||
|
||||
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 */
|
||||
|
@ -64,6 +64,7 @@
|
||||
#include "bytestream.h"
|
||||
#include "wmv2.h"
|
||||
#include "rv10.h"
|
||||
#include "libxvid.h"
|
||||
#include <limits.h>
|
||||
#include "sp5x.h"
|
||||
|
||||
@ -1027,9 +1028,32 @@ 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 FF_API_RC_STRATEGY
|
||||
av_assert0(MPV_RC_STRATEGY_XVID == FF_RC_STRATEGY_XVID);
|
||||
#endif
|
||||
|
||||
if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == MPV_RC_STRATEGY_XVID) {
|
||||
#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)
|
||||
@ -1123,6 +1147,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 == MPV_RC_STRATEGY_XVID)
|
||||
ff_xvid_rate_control_uninit(s);
|
||||
#endif
|
||||
|
||||
ff_mpv_common_end(s);
|
||||
if (CONFIG_MJPEG_ENCODER &&
|
||||
@ -3629,8 +3657,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 == MPV_RC_STRATEGY_XVID)
|
||||
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;
|
||||
}
|
||||
|
@ -136,13 +136,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;
|
||||
@ -226,21 +219,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
ff_rate_control_uninit(s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if FF_API_RC_STRATEGY
|
||||
av_assert0(MPV_RC_STRATEGY_XVID == FF_RC_STRATEGY_XVID);
|
||||
#endif
|
||||
|
||||
// FIXME maybe move to end
|
||||
if ((s->avctx->flags & AV_CODEC_FLAG_PASS2) && s->rc_strategy == MPV_RC_STRATEGY_XVID) {
|
||||
#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)) {
|
||||
@ -310,11 +288,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 == MPV_RC_STRATEGY_XVID)
|
||||
ff_xvid_rate_control_uninit(s);
|
||||
#endif
|
||||
}
|
||||
|
||||
int ff_vbv_update(MpegEncContext *s, int frame_size)
|
||||
@ -758,11 +731,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 == MPV_RC_STRATEGY_XVID)
|
||||
return ff_xvid_rate_estimate_qscale(s, dry_run);
|
||||
#endif
|
||||
|
||||
get_qminmax(&qmin, &qmax, s, pict_type);
|
||||
|
||||
fps = get_fps(s->avctx);
|
||||
|
@ -96,8 +96,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