[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