From 81bee9417cd5b6ccae2db7bc5cb935a967de1434 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Wed, 30 Apr 2025 18:20:51 +0200 Subject: [PATCH 38/44] avcodec/mpeg12dec: Don't reinit upon aspect ratio change The spec indeed does not allow the aspect ratio to change within a video sequence, but this does not imply that we must reinitialize the decoder if only the aspect ratio changes, as this value does not affect the decoding process at all. Moreover, our reinitialization is a bit buggy: If there is frame reordering, then the not yet output next P-frame is simply discarded upon reinit. With this patch this no longer happens when only the aspect ratio changes. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpeg12dec.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 910eed4932..3f387de0fd 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -80,7 +80,6 @@ typedef struct Mpeg1Context { int has_afd; int slice_count; unsigned aspect_ratio_info; - AVRational save_aspect; int save_width, save_height, save_progressive_seq; AVRational frame_rate_ext; /* MPEG-2 specific framerate modificator */ unsigned frame_rate_index; @@ -918,7 +917,6 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) avctx->coded_height != s->height || s1->save_width != s->width || s1->save_height != s->height || - av_cmp_q(s1->save_aspect, s->avctx->sample_aspect_ratio) || (s1->save_progressive_seq != s->progressive_sequence && FFALIGN(s->height, 16) != FFALIGN(s->height, 32)) || 0) { if (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO && s1->bit_rate && @@ -959,7 +957,6 @@ static int mpeg_decode_postinit(AVCodecContext *avctx) if (ret < 0) return ret; - s1->save_aspect = s->avctx->sample_aspect_ratio; s1->save_width = s->width; s1->save_height = s->height; s1->save_progressive_seq = s->progressive_sequence; -- 2.45.2