From aa241229891173b0357eee04e6ca78f806cc9c0c Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 27 Oct 2013 16:46:01 +0100 Subject: lavc: deprecate FF_MAX_B_FRAMES We should not arbitrarily decide the maximum B-frame number for all encoders supported by Libav, each encoder should be able to set its own limits. --- libavcodec/avcodec.h | 5 +++++ libavcodec/mpegvideo.h | 2 ++ libavcodec/mpegvideo_enc.c | 6 +++++- libavcodec/options_table.h | 2 +- libavcodec/version.h | 3 +++ 5 files changed, 16 insertions(+), 2 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 93e1368f43..294783bda6 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -630,7 +630,12 @@ typedef struct RcOverride{ float quality_factor; } RcOverride; +#if FF_API_MAX_BFRAMES +/** + * @deprecated there is no libavcodec-wide limit on the number of B-frames + */ #define FF_MAX_B_FRAMES 16 +#endif /* encoding support These flags can be passed in AVCodecContext.flags before initialization. diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 205cd432b5..50a87597a1 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -65,6 +65,8 @@ enum OutputFormat { #define MAX_PICTURE_COUNT 32 +#define MAX_B_FRAMES 16 + #define ME_MAP_SIZE 64 #define ME_MAP_SHIFT 3 #define ME_MAP_MV_BITS 11 diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 383025aab0..1acd0ffcb1 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -290,6 +290,10 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx) s->avctx = avctx; s->flags = avctx->flags; s->flags2 = avctx->flags2; + if (avctx->max_b_frames > MAX_B_FRAMES) { + av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum " + "is %d.\n", MAX_B_FRAMES); + } s->max_b_frames = avctx->max_b_frames; s->codec_id = avctx->codec->id; s->strict_std_compliance = avctx->strict_std_compliance; @@ -1021,7 +1025,7 @@ static int estimate_best_b_count(MpegEncContext *s) { AVCodec *codec = avcodec_find_encoder(s->avctx->codec_id); AVCodecContext *c = avcodec_alloc_context3(NULL); - AVFrame input[FF_MAX_B_FRAMES + 2]; + AVFrame input[MAX_B_FRAMES + 2]; const int scale = s->avctx->brd_scale; int i, j, out_size, p_lambda, b_lambda, lambda2; int64_t best_rd = INT64_MAX; diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index 820ec84ffa..3dc2780664 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -101,7 +101,7 @@ static const AVOption avcodec_options[] = { {"qmin", "minimum video quantizer scale (VBR)", OFFSET(qmin), AV_OPT_TYPE_INT, {.i64 = 2 }, -1, 69, V|E}, {"qmax", "maximum video quantizer scale (VBR)", OFFSET(qmax), AV_OPT_TYPE_INT, {.i64 = 31 }, -1, 69, V|E}, {"qdiff", "maximum difference between the quantizer scales (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.i64 = 3 }, INT_MIN, INT_MAX, V|E}, -{"bf", "use 'frames' B frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, FF_MAX_B_FRAMES, V|E}, +{"bf", "use 'frames' B frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E}, {"b_qfactor", "QP factor between P- and B-frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E}, {"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, {"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, V|E}, diff --git a/libavcodec/version.h b/libavcodec/version.h index 9ee6947d7d..5f86245f1d 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -109,5 +109,8 @@ #ifndef FF_API_MB_TYPE #define FF_API_MB_TYPE (LIBAVCODEC_VERSION_MAJOR < 56) #endif +#ifndef FF_API_MAX_BFRAMES +#define FF_API_MAX_BFRAMES (LIBAVCODEC_VERSION_MAJOR < 56) +#endif #endif /* AVCODEC_VERSION_H */ -- cgit v1.2.3