From 0063a06aaa900ff69e26f21d7ad7c1725c01a29c Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Tue, 25 Jan 2022 20:34:31 +0100 Subject: [PATCH] avcodec/mpegvideo_enc: Localize check for invalid number of b-frames Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_enc.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 044c675014..920cb337a1 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -350,9 +350,21 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum " "is %d.\n", MAX_B_FRAMES); avctx->max_b_frames = MAX_B_FRAMES; + } else if (avctx->max_b_frames < 0) { + av_log(avctx, AV_LOG_ERROR, + "max b frames must be 0 or positive for mpegvideo based encoders\n"); + return AVERROR(EINVAL); } s->max_b_frames = avctx->max_b_frames; s->codec_id = avctx->codec->id; + if (s->max_b_frames && + s->codec_id != AV_CODEC_ID_MPEG4 && + s->codec_id != AV_CODEC_ID_MPEG1VIDEO && + s->codec_id != AV_CODEC_ID_MPEG2VIDEO) { + av_log(avctx, AV_LOG_ERROR, "B-frames not supported by codec\n"); + return AVERROR(EINVAL); + } + s->strict_std_compliance = avctx->strict_std_compliance; s->quarter_sample = (avctx->flags & AV_CODEC_FLAG_QPEL) != 0; s->rtp_mode = !!s->rtp_payload_size; @@ -499,19 +511,6 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - if (s->max_b_frames && - s->codec_id != AV_CODEC_ID_MPEG4 && - s->codec_id != AV_CODEC_ID_MPEG1VIDEO && - s->codec_id != AV_CODEC_ID_MPEG2VIDEO) { - av_log(avctx, AV_LOG_ERROR, "B-frames not supported by codec\n"); - return AVERROR(EINVAL); - } - if (s->max_b_frames < 0) { - av_log(avctx, AV_LOG_ERROR, - "max b frames must be 0 or positive for mpegvideo based encoders\n"); - return AVERROR(EINVAL); - } - if ((s->codec_id == AV_CODEC_ID_MPEG4 || s->codec_id == AV_CODEC_ID_H263 || s->codec_id == AV_CODEC_ID_H263P) &&