Merge commit 'a6e4ce9fd50897dc6d9c2ada4b6b8090de7de5bf'

* commit 'a6e4ce9fd50897dc6d9c2ada4b6b8090de7de5bf':
  lavc: make rc_qsquish a private option of mpegvideo encoders

Conflicts:
	libavcodec/avcodec.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
pull/89/head
Michael Niedermayer 10 years ago
commit 7412835204
  1. 8
      libavcodec/avcodec.h
  2. 10
      libavcodec/mpegvideo.h
  3. 7
      libavcodec/mpegvideo_enc.c
  4. 4
      libavcodec/options_table.h
  5. 2
      libavcodec/ratecontrol.c
  6. 3
      libavcodec/version.h

@ -2271,13 +2271,13 @@ typedef struct AVCodecContext {
*/ */
int max_qdiff; int max_qdiff;
#if FF_API_MPV_OPT
/** /**
* ratecontrol qmin qmax limiting method * @deprecated use encoder private options instead
* 0-> clipping, 1-> use a nice continuous function to limit qscale within qmin/qmax.
* - encoding: Set by user.
* - decoding: unused
*/ */
attribute_deprecated
float rc_qsquish; float rc_qsquish;
#endif
float rc_qmod_amp; float rc_qmod_amp;
int rc_qmod_freq; int rc_qmod_freq;

@ -650,6 +650,12 @@ typedef struct MpegEncContext {
int mpv_flags; ///< flags set by private options int mpv_flags; ///< flags set by private options
int quantizer_noise_shaping; int quantizer_noise_shaping;
/**
* ratecontrol qmin qmax limiting method
* 0-> clipping, 1-> use a nice continuous function to limit qscale within qmin/qmax.
*/
float rc_qsquish;
/* temp buffers for rate control */ /* temp buffers for rate control */
float *cplx_tab, *bits_tab; float *cplx_tab, *bits_tab;
@ -694,7 +700,9 @@ typedef struct MpegEncContext {
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ { "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\
{ "error_rate", "Simulate errors in the bitstream to test error concealment.", \ { "error_rate", "Simulate errors in the bitstream to test error concealment.", \
FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\
{"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},
extern const AVOption ff_mpv_generic_options[]; extern const AVOption ff_mpv_generic_options[];

@ -950,6 +950,13 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
FF_ENABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS
#endif #endif
#if FF_API_MPV_OPT
FF_DISABLE_DEPRECATION_WARNINGS
if (avctx->rc_qsquish != 0.0)
s->rc_qsquish = avctx->rc_qsquish;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
if (avctx->b_frame_strategy == 2) { if (avctx->b_frame_strategy == 2) {
for (i = 0; i < s->max_b_frames + 2; i++) { for (i = 0; i < s->max_b_frames + 2; i++) {
s->tmp_frames[i] = av_frame_alloc(); s->tmp_frames[i] = av_frame_alloc();

@ -174,7 +174,9 @@ static const AVOption avcodec_options[] = {
{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, {"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E}, #if FF_API_MPV_OPT
{"qsquish", "deprecated, use encoder private options instead", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E},
#endif
{"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E}, {"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
{"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, {"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, {"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},

@ -570,7 +570,7 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce,
av_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n", av_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n",
q, max_rate, min_rate, buffer_size, rcc->buffer_index, q, max_rate, min_rate, buffer_size, rcc->buffer_index,
s->avctx->rc_buffer_aggressivity); s->avctx->rc_buffer_aggressivity);
if (s->avctx->rc_qsquish == 0.0 || qmin == qmax) { if (s->rc_qsquish == 0.0 || qmin == qmax) {
if (q < qmin) if (q < qmin)
q = qmin; q = qmin;
else if (q > qmax) else if (q > qmax)

@ -181,5 +181,8 @@
#ifndef FF_API_AVCTX_TIMEBASE #ifndef FF_API_AVCTX_TIMEBASE
#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) #define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59)
#endif #endif
#ifndef FF_API_MPV_OPT
#define FF_API_MPV_OPT (LIBAVCODEC_VERSION_MAJOR < 59)
#endif
#endif /* AVCODEC_VERSION_H */ #endif /* AVCODEC_VERSION_H */

Loading…
Cancel
Save