avformat/movenc: Write 'av01' as a compatible brand when muxing AV1
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Wed, 17 Jun 2020 13:43:28 +0000 (14:43 +0100)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Wed, 17 Jun 2020 18:06:45 +0000 (19:06 +0100)
This is a requirement of the AV1-ISOBMFF spec. Section 2.1.
General Requirements & Brands states:

    * It SHALL have the av01 brand among the compatible brands array of the FileTypeBox

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
libavformat/movenc.c
tests/ref/lavf-fate/av1.mp4

index 520aaaf..6eeac8e 100644 (file)
@@ -4875,7 +4875,7 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
 {
     MOVMuxContext *mov = s->priv_data;
     int64_t pos = avio_tell(pb);
-    int has_h264 = 0, has_video = 0;
+    int has_h264 = 0, has_av1 = 0, has_video = 0;
     int i;
 
     for (i = 0; i < s->nb_streams; i++) {
@@ -4886,6 +4886,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
             has_video = 1;
         if (st->codecpar->codec_id == AV_CODEC_ID_H264)
             has_h264 = 1;
+        if (st->codecpar->codec_id == AV_CODEC_ID_AV1)
+            has_av1 = 1;
     }
 
     avio_wb32(pb, 0); /* size */
@@ -4909,6 +4911,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
                 ffio_wfourcc(pb, "cmfc");
             if (mov->flags & FF_MOV_FLAG_FRAGMENT && !(mov->flags & FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS))
                 ffio_wfourcc(pb, "iso6");
+            if (has_av1)
+                ffio_wfourcc(pb, "av01");
         } else {
             if (mov->flags & FF_MOV_FLAG_FRAGMENT)
                 ffio_wfourcc(pb, "iso6");
index 38d2a80..c8dc8e9 100644 (file)
@@ -1,3 +1,3 @@
-0388467214421a19ba65d10a74dc35c0 *tests/data/lavf-fate/lavf.av1.mp4
-55936 tests/data/lavf-fate/lavf.av1.mp4
+4eed679a1d3e18edfd95b268167d8060 *tests/data/lavf-fate/lavf.av1.mp4
+55940 tests/data/lavf-fate/lavf.av1.mp4
 tests/data/lavf-fate/lavf.av1.mp4 CRC=0x7c27cc15