]> git.sesse.net Git - vlc/commitdiff
demux: mp4: add DASH major and switch demuxer accordingly
authorFrancois Cartegnie <fcvlcdev@free.fr>
Fri, 12 Dec 2014 13:38:01 +0000 (14:38 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Thu, 18 Dec 2014 20:23:51 +0000 (21:23 +0100)
modules/demux/mp4/libmp4.h
modules/demux/mp4/mp4.c

index bccf302ea4aacd148e63b830a12f9eca57d134aa..798255e888a74c29c2ef28cfb7867ccc3eeab78a 100644 (file)
@@ -35,6 +35,7 @@
 #define MAJOR_isml VLC_FOURCC( 'i', 's', 'm', 'l' )
 #define MAJOR_isom VLC_FOURCC( 'i', 's', 'o', 'm' )
 #define MAJOR_qt__ VLC_FOURCC( 'q', 't', ' ', ' ' )
+#define MAJOR_dash VLC_FOURCC( 'd', 'a', 's', 'h' )
 
 #define ATOM_root VLC_FOURCC( 'r', 'o', 'o', 't' )
 #define ATOM_uuid VLC_FOURCC( 'u', 'u', 'i', 'd' )
index aecc247ab832be4c4b7663e13c4fd509776d3de1..42a5f70de673c9cad3f2f0c26810e19ff4f02650 100644 (file)
@@ -84,6 +84,7 @@ struct demux_sys_t
     bool         b_fastseekable;
     bool         b_seekmode;
     bool         b_smooth;       /* Is it Smooth Streaming? */
+    bool         b_dash;
 
     bool            b_index_probed;
     bool            b_fragments_probed;
@@ -626,15 +627,6 @@ static int Open( vlc_object_t * p_this )
     if ( !p_sys->moovfragment.p_moox && !p_sys->b_smooth )
         goto error;
 
-    if ( p_sys->b_smooth )
-    {
-        p_demux->pf_demux = DemuxFrg;
-    }
-    else if( p_sys->b_fragmented )
-    {
-        p_demux->pf_demux = DemuxAsLeaf;
-    }
-
     if( p_sys->b_smooth )
     {
         if( InitTracks( p_demux ) != VLC_SUCCESS )
@@ -672,18 +664,40 @@ static int Open( vlc_object_t * p_this )
             case MAJOR_isml:
                 msg_Dbg( p_demux, "PIFF (= isml = fMP4) file" );
                 break;
+            case MAJOR_dash:
+                msg_Dbg( p_demux, "DASH Stream file" );
+                p_sys->b_dash = true;
+                break;
             default:
                 msg_Dbg( p_demux,
                          "unrecognized major file specification (%4.4s).",
                           (char*)&BOXDATA(p_ftyp)->i_major_brand );
                 break;
         }
+        /* also lookup in compatibility list */
+        for(uint32_t i=0; i<BOXDATA(p_ftyp)->i_compatible_brands_count; i++)
+        {
+            if (BOXDATA(p_ftyp)->i_compatible_brands[i] == MAJOR_dash)
+            {
+                msg_Dbg( p_demux, "DASH Stream file" );
+                p_sys->b_dash = true;
+            }
+        }
     }
     else
     {
         msg_Dbg( p_demux, "file type box missing (assuming ISO Media file)" );
     }
 
+    if ( p_sys->b_smooth || p_sys->b_dash )
+    {
+        p_demux->pf_demux = DemuxFrg;
+    }
+    else if( p_sys->b_fragmented )
+    {
+        p_demux->pf_demux = DemuxAsLeaf;
+    }
+
     /* the file need to have one moov box */
     p_sys->moovfragment.p_moox = MP4_BoxGet( p_sys->p_root, "/moov", 0 );
     if( !p_sys->moovfragment.p_moox )