History

avformat/matroskaenc: Use native id V_FFV1 instead of V_MS/VFW/FOURCC

Up until now, our muxer wrote FFV1 in video-for-windows compatibility mode out of concern for old demuxers that only support that (whereas the demuxer accepts V_FFV1). This commit switches to using native mode, because a) V_FFV1 is around long enough so that old demuxers should not be an issue (support in FFmpeg has been added in commit 9ae762da7e256aa4d3b645c614fcd1959e1cbb8d in March 2017/FFmpeg 3.3), b) using native mode uses fewer bytes for the CodecPrivate, c) the VfW extradata is zero-padded to an even length if necessary, but our demuxer forgot to undo the padding until very recently (92e310eb82e04713e55d248b65c22f0eb95afada), so that there are many versions of our demuxer around that are buggy wrt VFW, but not V_FFV1. This affects the FFV1 extradata checksums, specifically the (experimental) version 4 files with error check version 2* as created by ffmpeg -i ../fate-suite/mpeg2/sony-ct3.bs -c:v ffv1 \ -slices 16 -frames 1 -level 4 -strict experimental ffv1.mkv VFW files like the above created by this muxer before this patch would not work with an old demuxer. *: Without error check version 2, the CRC for the whole extradata is zero, which is not changed by appending a zero byte.

Andreas Rheinhardt committed 1 year ago

Commit 96d4bcb1 parent 8a936b82 files · +4 −4Browse files

Unified · Split

2 files
  1. libavformat/matroskaenc.c +2 −2
  2. tests/ref/fate/matroska-mastering-display-metadata +2 −2
libavformat/matroskaenc.c+2−2
@@ -1960,8 +1960,8 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, · 1959 unmodified lines
1960 1960
1961 // look for a codec ID string specific to mkv to use,1961 // look for a codec ID string specific to mkv to use,
1962 // if none are found, use AVI codes1962 // if none are found, use AVI codes
1963 if (par->codec_id == AV_CODEC_ID_FFV1 || par->codec_id == AV_CODEC_ID_JPEG2000) {1963 if (par->codec_id == AV_CODEC_ID_JPEG2000) {
1964 /* FFV1 and JPEG2000 are actually supported natively in Matroska,1964 /* JPEG2000 is actually supported natively in Matroska,
1965 * yet we use the VfW way to mux it for compatibility1965 * yet we use the VfW way to mux it for compatibility
1966 * with old demuxers. (FIXME: Are they really important?) */1966 * with old demuxers. (FIXME: Are they really important?) */
1967 } else if (par->codec_id != AV_CODEC_ID_RAWVIDEO || par->codec_tag) {1967 } else if (par->codec_id != AV_CODEC_ID_RAWVIDEO || par->codec_tag) {
tests/ref/fate/matroska-mastering-display-metadata+2−2
@@ -1,5 +1,5 @@
1c1e5e2ecf433cf05af8556debc7d4d0b *tests/data/fate/matroska-mastering-display-metadata.matroska1bdca53906b34c57192416a0f737b885e *tests/data/fate/matroska-mastering-display-metadata.matroska
21669773 tests/data/fate/matroska-mastering-display-metadata.matroska21669723 tests/data/fate/matroska-mastering-display-metadata.matroska
3#extradata 0: 4, 0x040901a33#extradata 0: 4, 0x040901a3
4#extradata 3: 201, 0x9a7062794#extradata 3: 201, 0x9a706279
5#tb 0: 1/10005#tb 0: 1/1000

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t