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. It should also fix ticket #11613.
Unified · Split
| @@ -2877,6 +2877,11 @@ static int mkv_parse_video_codec(MatroskaTrack *track, AVCodecParameters *par, · 2876 unmodified lines | ||
| 2877 | 2877 | { |
| 2878 | 2878 | if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC") && |
| 2879 | 2879 | track->codec_priv.size >= 40) { |
| 2880 | + uint32_t size = AV_RL32A(track->codec_priv.data); | |
| 2881 | + // VFW extradata is padded to an even length, yet | |
| 2882 | + // the size field contains the real length. | |
| 2883 | + if (size & 1 && size == track->codec_priv.size - 1) | |
| 2884 | + --track->codec_priv.size; | |
| 2880 | 2885 | track->ms_compat = 1; |
| 2881 | 2886 | par->bits_per_coded_sample = AV_RL16(track->codec_priv.data + 14); |
| 2882 | 2887 | par->codec_tag = AV_RL32(track->codec_priv.data + 16); |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | c1e5e2ecf433cf05af8556debc7d4d0b *tests/data/fate/matroska-mastering-display-metadata.matroska |
| 2 | 2 | 1669773 tests/data/fate/matroska-mastering-display-metadata.matroska |
| 3 | 3 | #extradata 0: 4, 0x040901a3 |
| 4 | −#extradata 3: 202, 0xfce96279 | |
| 4 | +#extradata 3: 201, 0x9a706279 | |
| 5 | 5 | #tb 0: 1/1000 |
| 6 | 6 | #media_type 0: video |
| 7 | 7 | #codec_id 0: prores |