]> git.sesse.net Git - vlc/commitdiff
demux: libmp4: add support for disk meta
authorFrancois Cartegnie <fcvlcdev@free.fr>
Thu, 16 Oct 2014 16:08:49 +0000 (18:08 +0200)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Thu, 16 Oct 2014 18:05:02 +0000 (20:05 +0200)
modules/demux/mp4/libmp4.c
modules/demux/mp4/libmp4.h
modules/demux/mp4/meta.c

index f0c4433e108d59cc77062aef120933d3522941b9..c1e5d3a3932f6c10b3e00fe22c99c703e55ad51b 100644 (file)
@@ -3712,6 +3712,7 @@ static const struct
     { ATOM_0xa9wrt, MP4_ReadBox_0xa9xxx,      MP4_FreeBox_0xa9xxx, ATOM_ilst },
     { ATOM_chpl,    MP4_ReadBox_chpl,         MP4_FreeBox_chpl,    ATOM_ilst },
     { ATOM_covr,    MP4_ReadBoxContainer,     MP4_FreeBox_Common,  ATOM_ilst },
+    { ATOM_disk,    MP4_ReadBox_Metadata,     MP4_FreeBox_Common,  ATOM_ilst },
     { ATOM_gnre,    MP4_ReadBox_Metadata,     MP4_FreeBox_Common,  ATOM_ilst },
     { ATOM_trkn,    MP4_ReadBox_Metadata,     MP4_FreeBox_Common,  ATOM_ilst },
 
index 29ba81257880ec123b1a65ca2d8686950dedda42..df78f4fa7c7ccb7f31f94169efc4ea164991d23f 100644 (file)
 #define ATOM_0xa9xpd VLC_FOURCC( 0xa9, 'x', 'p', 'd' )
 #define ATOM_0xa9xyz VLC_FOURCC( 0xa9, 'x', 'y', 'z' )
 #define ATOM_chpl VLC_FOURCC( 'c', 'h', 'p', 'l' )
+#define ATOM_disk VLC_FOURCC( 'd', 'i', 's', 'k' )
 #define ATOM_WLOC VLC_FOURCC( 'W', 'L', 'O', 'C' )
 
 #define ATOM_meta VLC_FOURCC( 'm', 'e', 't', 'a' )
index 480a3e8e0fc8d6cff18b4619cfec35978c9f0c0b..a17a385ff283dd7ac99e0032506102e76b6bc4af 100644 (file)
@@ -242,6 +242,20 @@ static void SetupmdirMeta( vlc_meta_t *p_meta, MP4_Box_t *p_box )
     /* XXX Becarefull p_udta can have box that are not 0xa9xx */
     switch( p_box->i_type )
     {
+    case ATOM_disk:
+    {
+        const MP4_Box_t *p_data = MP4_BoxGet( p_box, "data" );
+        if ( p_data && BOXDATA(p_data) && BOXDATA(p_data)->i_blob >= 6 &&
+             BOXDATA(p_data)->e_wellknowntype == DATA_WKT_RESERVED )
+        {
+            char psz_utf[5 + 5 + 4];
+            snprintf( psz_utf, sizeof( psz_utf ), "%"PRIu16" / %"PRIu16,
+                      GetWBE(&BOXDATA(p_data)->p_blob[2]),
+                      GetWBE(&BOXDATA(p_data)->p_blob[4]) );
+            vlc_meta_AddExtra( p_meta, N_("Disc"), psz_utf );
+        }
+        break;
+    }
     case ATOM_gnre:
     {
         const MP4_Box_t *p_data = MP4_BoxGet( p_box, "data" );