[vlc-commits] demux: mp4: add DASH major and switch demuxer accordingly

Francois Cartegnie git at videolan.org
Thu Dec 18 22:39:55 CET 2014


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Dec 12 14:38:01 2014 +0100| [e4c7e797046fe7665869f34d1294bfa85edefd14] | committer: Francois Cartegnie

demux: mp4: add DASH major and switch demuxer accordingly

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

 modules/demux/mp4/libmp4.h |    1 +
 modules/demux/mp4/mp4.c    |   32 +++++++++++++++++++++++---------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index bccf302..798255e 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -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' )
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index aecc247..42a5f70 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -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 )



More information about the vlc-commits mailing list