[vlc-commits] mux: mp4: write extra brands dynamically

Francois Cartegnie git at videolan.org
Mon Oct 29 16:44:11 CET 2018


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon Oct 29 16:33:14 2018 +0100| [e04526219e58e80c092ebed132c55565c081d2fe] | committer: Francois Cartegnie

mux: mp4: write extra brands dynamically

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e04526219e58e80c092ebed132c55565c081d2fe
---

 modules/mux/mp4/libmp4mux.c | 32 ++++++++++++++++++++++++++++++++
 modules/mux/mp4/mp4.c       |  3 ---
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/modules/mux/mp4/libmp4mux.c b/modules/mux/mp4/libmp4mux.c
index 0c27563f0f..6cc01f4744 100644
--- a/modules/mux/mp4/libmp4mux.c
+++ b/modules/mux/mp4/libmp4mux.c
@@ -83,6 +83,37 @@ struct mp4mux_handle_t
     } brands;
 };
 
+static void mp4mux_AddExtraBrandForFormat(mp4mux_handle_t *h, const es_format_t *fmt)
+{
+    switch(fmt->i_codec)
+    {
+        case VLC_CODEC_H264:
+            mp4mux_AddExtraBrand(h, MAJOR_avc1);
+            break;
+        case VLC_CODEC_HEVC:
+            mp4mux_AddExtraBrand(h, MAJOR_hevc);
+            break;
+        case VLC_CODEC_AV1:
+            mp4mux_AddExtraBrand(h, VLC_FOURCC('a','v','0','1'));
+            mp4mux_AddExtraBrand(h, VLC_FOURCC('i','s','o','6'));
+            break;
+        case VLC_CODEC_MP4V:
+        case VLC_CODEC_DIV1:
+        case VLC_CODEC_DIV2:
+        case VLC_CODEC_DIV3:
+        case VLC_CODEC_H263:
+            mp4mux_AddExtraBrand(h, MAJOR_mp41);
+            break;
+        case VLC_CODEC_MP4A:
+            mp4mux_AddExtraBrand(h, MAJOR_mp41);
+            if(vlc_array_count(&h->tracks) == 1)
+                mp4mux_AddExtraBrand(h, MAJOR_M4A);
+            break;
+        default:
+            break;
+    }
+}
+
 static bool mp4mux_trackinfo_Init(mp4mux_trackinfo_t *p_stream, unsigned i_id,
                                   uint32_t i_timescale)
 {
@@ -117,6 +148,7 @@ mp4mux_trackinfo_t * mp4mux_track_Add(mp4mux_handle_t *h, unsigned id,
     es_format_Init(&t->fmt, fmt->i_cat, fmt->i_codec);
     es_format_Copy(&t->fmt, fmt);
     vlc_array_append(&h->tracks, t);
+    mp4mux_AddExtraBrandForFormat(h, fmt);
     return t;
 }
 
diff --git a/modules/mux/mp4/mp4.c b/modules/mux/mp4/mp4.c
index 4f78255da2..99f3947d6d 100644
--- a/modules/mux/mp4/mp4.c
+++ b/modules/mux/mp4/mp4.c
@@ -260,13 +260,10 @@ static int Open(vlc_object_t *p_this)
     {
         mp4mux_SetBrand(p_sys->muxh, MAJOR_3gp6, 0x0);
         mp4mux_AddExtraBrand(p_sys->muxh, MAJOR_3gp4);
-        mp4mux_AddExtraBrand(p_sys->muxh, MAJOR_avc1);
     }
     else
     {
         mp4mux_SetBrand(p_sys->muxh, MAJOR_isom, 0x0);
-        mp4mux_AddExtraBrand(p_sys->muxh, MAJOR_mp41);
-        mp4mux_AddExtraBrand(p_sys->muxh, MAJOR_avc1);
     }
 
     return VLC_SUCCESS;



More information about the vlc-commits mailing list