[vlc-commits] demux: mp4: refactor track selection code
Francois Cartegnie
git at videolan.org
Mon Mar 6 11:58:35 CET 2017
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Mar 3 12:28:37 2017 +0100| [dd3836709b5f623a4a5c81be3770fb50e76deafd] | committer: Francois Cartegnie
demux: mp4: refactor track selection code
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=dd3836709b5f623a4a5c81be3770fb50e76deafd
---
modules/demux/mp4/mp4.c | 73 ++++++++++---------------------------------------
1 file changed, 14 insertions(+), 59 deletions(-)
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index f52cf62..de0d5d8 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -130,9 +130,7 @@ static void MP4_TrackDestroy( demux_t *, mp4_track_t * );
static void MP4_Block_Send( demux_t *, mp4_track_t *, block_t * );
-static int MP4_TrackSelect ( demux_t *, mp4_track_t *, mtime_t );
-static void MP4_TrackUnselect(demux_t *, mp4_track_t * );
-
+static void MP4_TrackSelect ( demux_t *, mp4_track_t *, bool );
static int MP4_TrackSeek ( demux_t *, mp4_track_t *, mtime_t );
static uint64_t MP4_TrackGetPos ( mp4_track_t * );
@@ -1216,7 +1214,7 @@ static int DemuxTrack( demux_t *p_demux, mp4_track_t *tk, uint64_t i_readpos,
msg_Warn( p_demux, "track[0x%x] will be disabled (eof?)"
": Failed to seek to %"PRIu64,
tk->i_track_ID, i_readpos );
- MP4_TrackUnselect( p_demux, tk );
+ MP4_TrackSelect( p_demux, tk, false );
goto end;
}
}
@@ -1227,7 +1225,7 @@ static int DemuxTrack( demux_t *p_demux, mp4_track_t *tk, uint64_t i_readpos,
msg_Warn( p_demux, "track[0x%x] will be disabled (eof?)"
": Failed to read %d bytes sample at %"PRIu64,
tk->i_track_ID, i_samplessize, i_readpos );
- MP4_TrackUnselect( p_demux, tk );
+ MP4_TrackSelect( p_demux, tk, false );
goto end;
}
@@ -1283,11 +1281,11 @@ static int Demux( demux_t *p_demux )
if( tk->b_selected && !b )
{
- MP4_TrackUnselect( p_demux, tk );
+ MP4_TrackSelect( p_demux, tk, false );
}
else if( !tk->b_selected && b)
{
- MP4_TrackSelect( p_demux, tk, MP4_GetMoviePTS( p_sys ) );
+ MP4_TrackSeek( p_demux, tk, MP4_GetMoviePTS( p_sys ) );
}
}
@@ -3324,44 +3322,21 @@ static void MP4_TrackDestroy( demux_t *p_demux, mp4_track_t *p_track )
block_ChainRelease( p_track->asfinfo.p_frame );
}
-static int MP4_TrackSelect( demux_t *p_demux, mp4_track_t *p_track,
- mtime_t i_start )
+static void MP4_TrackSelect( demux_t *p_demux, mp4_track_t *p_track, bool b_select )
{
if( !p_track->b_ok || p_track->b_chapters_source )
- {
- return VLC_EGENERIC;
- }
-
- if( p_track->b_selected )
- {
- msg_Warn( p_demux, "track[Id 0x%x] already selected",
- p_track->i_track_ID );
- return VLC_SUCCESS;
- }
-
- return MP4_TrackSeek( p_demux, p_track, i_start );
-}
-
-static void MP4_TrackUnselect( demux_t *p_demux, mp4_track_t *p_track )
-{
- if( !p_track->b_ok || p_track->b_chapters_source )
- {
return;
- }
- if( !p_track->b_selected )
- {
- msg_Warn( p_demux, "track[Id 0x%x] already unselected",
- p_track->i_track_ID );
+ if( b_select == p_track->b_selected )
return;
- }
- if( p_track->p_es )
+
+ if( !b_select && p_track->p_es )
{
es_out_Control( p_demux->out, ES_OUT_SET_ES_STATE,
p_track->p_es, false );
}
- p_track->b_selected = false;
+ p_track->b_selected = b_select;
}
static int MP4_TrackSeek( demux_t *p_demux, mp4_track_t *p_track,
@@ -3667,7 +3642,7 @@ static int MP4_TrackNextSample( demux_t *p_demux, mp4_track_t *p_track, uint32_t
{
msg_Warn( p_demux, "track[0x%x] will be disabled "
"(cannot restart decoder)", p_track->i_track_ID );
- MP4_TrackUnselect( p_demux, p_track );
+ MP4_TrackSelect( p_demux, p_track, false );
return VLC_EGENERIC;
}
}
@@ -3763,24 +3738,6 @@ static int ReInitDecoder( demux_t *p_demux, const MP4_Box_t *p_root,
}
#endif
-static int MP4_frg_TrackSelect( demux_t *p_demux, mp4_track_t *p_track )
-{
- if( !p_track->b_ok || p_track->b_chapters_source )
- {
- return VLC_EGENERIC;
- }
-
- if( p_track->b_selected )
- {
- msg_Warn( p_demux, "track[Id 0x%x] already selected", p_track->i_track_ID );
- return VLC_SUCCESS;
- }
-
- msg_Dbg( p_demux, "Select track id %u", p_track->i_track_ID );
- p_track->b_selected = true;
- return VLC_SUCCESS;
-}
-
static mtime_t SumFragmentsDurations( demux_t *p_demux )
{
demux_sys_t *p_sys = p_demux->p_sys;
@@ -4824,12 +4781,10 @@ static int DemuxAsLeaf( demux_t *p_demux )
es_out_Control( p_demux->out, ES_OUT_GET_ES_STATE, tk->p_es, &b );
if(tk->b_selected != b)
+ {
msg_Dbg( p_demux, "track %u %s!", tk->i_track_ID, b ? "enabled" : "disabled" );
-
- if( tk->b_selected && !b )
- MP4_TrackUnselect( p_demux, tk );
- else if( !tk->b_selected && b)
- MP4_frg_TrackSelect( p_demux, tk );
+ MP4_TrackSelect( p_demux, tk, b );
+ }
if( tk->b_selected )
i_track_selected++;
More information about the vlc-commits
mailing list