[vlc-commits] input: factor init code for demux infos
Rémi Denis-Courmont
git at videolan.org
Tue Oct 20 22:33:13 CEST 2015
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Oct 20 21:42:46 2015 +0300| [2237ed701d61620ea64851ff597a02be39c1c870] | committer: Rémi Denis-Courmont
input: factor init code for demux infos
This shares the code between access_demux and demux cases.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2237ed701d61620ea64851ff597a02be39c1c870
---
src/input/input.c | 125 ++++++++++++++++++++---------------------------------
1 file changed, 48 insertions(+), 77 deletions(-)
diff --git a/src/input/input.c b/src/input/input.c
index de5bc92..7bdbc19 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -2179,44 +2179,8 @@ static int InputSourceInit( input_thread_t *p_input,
msg_Dbg( p_input, "trying to pre-parse %s", psz_path );
}
- mtime_t i_pts_delay;
-
if( in->p_demux )
{
- /* Get infos from access_demux */
- in->b_title_demux = true;
- if( demux_Control( in->p_demux, DEMUX_GET_TITLE_INFO,
- &in->title, &in->i_title,
- &in->i_title_offset, &in->i_seekpoint_offset ) )
- {
- TAB_INIT( in->i_title, in->title );
- }
- if( demux_Control( in->p_demux, DEMUX_CAN_CONTROL_PACE,
- &in->b_can_pace_control ) )
- in->b_can_pace_control = false;
-
- assert( in->p_demux->pf_demux != NULL || !in->b_can_pace_control );
-
- if( !in->b_can_pace_control )
- {
- if( demux_Control( in->p_demux, DEMUX_CAN_CONTROL_RATE,
- &in->b_can_rate_control, &in->b_rescale_ts ) )
- {
- in->b_can_rate_control = false;
- in->b_rescale_ts = true; /* not used */
- }
- }
- else
- {
- in->b_can_rate_control = true;
- in->b_rescale_ts = true;
- }
- if( demux_Control( in->p_demux, DEMUX_CAN_PAUSE,
- &in->b_can_pause ) )
- in->b_can_pause = false;
- var_SetBool( p_input, "can-pause", in->b_can_pause || !in->b_can_pace_control ); /* XXX temporary because of es_out_timeshift*/
- var_SetBool( p_input, "can-rate", !in->b_can_pace_control || in->b_can_rate_control ); /* XXX temporary because of es_out_timeshift*/
- var_SetBool( p_input, "can-rewind", !in->b_rescale_ts && !in->b_can_pace_control && in->b_can_rate_control );
}
else
{ /* Now try a real access */
@@ -2305,26 +2269,6 @@ static int InputSourceInit( input_thread_t *p_input,
if( var_GetBool( p_input, "input-record-native" ) )
p_stream = stream_FilterChainNew( p_stream, "record" );
- if( !p_input->b_preparsing )
- {
- stream_Control( p_stream, STREAM_CAN_CONTROL_PACE,
- &in->b_can_pace_control );
- in->b_can_rate_control = in->b_can_pace_control;
- in->b_rescale_ts = true;
-
- stream_Control( p_stream, STREAM_CAN_PAUSE, &in->b_can_pause );
- var_SetBool( p_input, "can-pause",
- in->b_can_pause || !in->b_can_pace_control ); /* XXX temporary because of es_out_timeshift*/
- var_SetBool( p_input, "can-rate",
- !in->b_can_pace_control || in->b_can_rate_control ); /* XXX temporary because of es_out_timeshift*/
- var_SetBool( p_input, "can-rewind",
- !in->b_rescale_ts && !in->b_can_pace_control );
-
- in->b_title_demux = false;
-
- stream_Control( p_stream, STREAM_GET_PTS_DELAY, &i_pts_delay );
- }
-
if( p_stream->psz_url != NULL )
/* Take access/stream redirections into account: */
psz_path = strstr( p_stream->psz_url, "://" );
@@ -2349,31 +2293,52 @@ static int InputSourceInit( input_thread_t *p_input,
goto error;
}
assert( in->p_demux->pf_demux != NULL );
-
- /* Get title from demux */
- if( !p_input->b_preparsing && in->i_title <= 0 )
- {
- if( demux_Control( in->p_demux, DEMUX_GET_TITLE_INFO,
- &in->title, &in->i_title,
- &in->i_title_offset, &in->i_seekpoint_offset ))
- {
- TAB_INIT( in->i_title, in->title );
- }
- else
- {
- in->b_title_demux = true;
- }
- }
}
free( psz_var_demux );
free( psz_dup );
+ /* Get infos from (access_)demux */
bool b_can_seek;
if( demux_Control( in->p_demux, DEMUX_CAN_SEEK, &b_can_seek ) )
b_can_seek = false;
var_SetBool( p_input, "can-seek", b_can_seek );
+ if( demux_Control( in->p_demux, DEMUX_CAN_CONTROL_PACE,
+ &in->b_can_pace_control ) )
+ in->b_can_pace_control = false;
+
+ assert( in->p_demux->pf_demux != NULL || !in->b_can_pace_control );
+
+ if( in->p_demux->s != NULL )
+ {
+ if( !in->b_can_pace_control )
+ {
+ if( demux_Control( in->p_demux, DEMUX_CAN_CONTROL_RATE,
+ &in->b_can_rate_control, &in->b_rescale_ts ) )
+ {
+ in->b_can_rate_control = false;
+ in->b_rescale_ts = true; /* not used */
+ }
+ }
+ else
+ {
+ in->b_can_rate_control = true;
+ in->b_rescale_ts = true;
+ }
+ }
+ else
+ {
+ in->b_can_rate_control = in->b_can_pace_control;
+ in->b_rescale_ts = true;
+ }
+
+ demux_Control( in->p_demux, DEMUX_CAN_PAUSE, &in->b_can_pause );
+
+ var_SetBool( p_input, "can-pause", in->b_can_pause || !in->b_can_pace_control ); /* XXX temporary because of es_out_timeshift*/
+ var_SetBool( p_input, "can-rate", !in->b_can_pace_control || in->b_can_rate_control ); /* XXX temporary because of es_out_timeshift*/
+ var_SetBool( p_input, "can-rewind", !in->b_rescale_ts && !in->b_can_pace_control && in->b_can_rate_control );
+
/* Set record capabilities */
if( demux_Control( in->p_demux, DEMUX_CAN_RECORD, &in->b_can_stream_record ) )
in->b_can_stream_record = false;
@@ -2389,6 +2354,17 @@ static int InputSourceInit( input_thread_t *p_input,
* FIXME improve for b_preparsing: move it after GET_META and check psz_arturl */
if( !p_input->b_preparsing )
{
+ if( demux_Control( in->p_demux, DEMUX_GET_TITLE_INFO,
+ &in->title, &in->i_title,
+ &in->i_title_offset, &in->i_seekpoint_offset ))
+ {
+ TAB_INIT( in->i_title, in->title );
+ }
+ else
+ {
+ in->b_title_demux = true;
+ }
+
int i_attachment;
input_attachment_t **attachment;
if( !demux_Control( in->p_demux, DEMUX_GET_ATTACHMENTS,
@@ -2400,12 +2376,7 @@ static int InputSourceInit( input_thread_t *p_input,
vlc_mutex_unlock( &p_input->p->p_item->lock );
}
- /* PTS delay: request from demux first. This is required for
- * access_demux and some special cases like SDP demux. Otherwise,
- * fallback to access */
- if( demux_Control( in->p_demux, DEMUX_GET_PTS_DELAY,
- &in->i_pts_delay ) )
- in->i_pts_delay = i_pts_delay;
+ demux_Control( in->p_demux, DEMUX_GET_PTS_DELAY, &in->i_pts_delay );
if( in->i_pts_delay > INPUT_PTS_DELAY_MAX )
in->i_pts_delay = INPUT_PTS_DELAY_MAX;
else if( in->i_pts_delay < 0 )
More information about the vlc-commits
mailing list