From 5d8954294fee0d1086047ae2587856c3afb7ff7c Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sun, 25 May 2025 05:12:05 +0200 Subject: [PATCH 2/3] avformat/matroskadec: Fix VfW extradata size The structure is padded to an even length with an internal size field to indicate the real size. The matroska-matroska-display-metadata test (writing FFV1 in VFW mode) was affected by this. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 5 +++++ tests/ref/fate/matroska-mastering-display-metadata | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 2750652c51..da5166319e 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2877,6 +2877,11 @@ static int mkv_parse_video_codec(MatroskaTrack *track, AVCodecParameters *par, { if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC") && track->codec_priv.size >= 40) { + uint32_t size = AV_RL32A(track->codec_priv.data); + // VFW extradata is padded to an even length, yet + // the size field contains the real length. + if (size & 1 && size == track->codec_priv.size - 1) + --track->codec_priv.size; track->ms_compat = 1; par->bits_per_coded_sample = AV_RL16(track->codec_priv.data + 14); par->codec_tag = AV_RL32(track->codec_priv.data + 16); diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index 6a2ff15b1b..5984f54131 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -1,7 +1,7 @@ c1e5e2ecf433cf05af8556debc7d4d0b *tests/data/fate/matroska-mastering-display-metadata.matroska 1669773 tests/data/fate/matroska-mastering-display-metadata.matroska #extradata 0: 4, 0x040901a3 -#extradata 3: 202, 0xfce96279 +#extradata 3: 201, 0x9a706279 #tb 0: 1/1000 #media_type 0: video #codec_id 0: prores -- 2.45.2