[vlc-commits] input: query access object before creating stream object (refs #8414)

Rémi Denis-Courmont git at videolan.org
Sun Apr 14 18:20:39 CEST 2013


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Apr 14 19:19:04 2013 +0300| [534f8d2f6c7a4d18f8865082e59d8caf4f51f9e2] | committer: Rémi Denis-Courmont

input: query access object before creating stream object (refs #8414)

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

 src/input/input.c |   44 +++++++++++++++++++++-----------------------
 1 file changed, 21 insertions(+), 23 deletions(-)

diff --git a/src/input/input.c b/src/input/input.c
index 306a91a..b3f4823 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -2410,6 +2410,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 */
@@ -2453,10 +2455,10 @@ static int InputSourceInit( input_thread_t *p_input,
         var_SetBool( p_input, "can-seek", b_can_seek );
     }
     else
-    {
-        /* Now try a real access */
-        in->p_access = access_New( p_input, p_input, psz_access, psz_demux, psz_path );
-        if( in->p_access == NULL )
+    {   /* Now try a real access */
+        access_t *p_access = access_New( p_input, p_input,
+                                         psz_access, psz_demux, psz_path );
+        if( p_access == NULL )
         {
             if( vlc_object_alive( p_input ) )
             {
@@ -2475,27 +2477,33 @@ static int InputSourceInit( input_thread_t *p_input,
             bool b_can_seek;
 
             in->b_title_demux = false;
-            if( access_Control( in->p_access, ACCESS_GET_TITLE_INFO,
-                                 &in->title, &in->i_title,
+            if( access_Control( p_access, ACCESS_GET_TITLE_INFO,
+                                &in->title, &in->i_title,
                                 &in->i_title_offset, &in->i_seekpoint_offset ) )
 
             {
                 TAB_INIT( in->i_title, in->title );
             }
-            access_Control( in->p_access, ACCESS_CAN_CONTROL_PACE,
-                             &in->b_can_pace_control );
+            access_Control( p_access, ACCESS_CAN_CONTROL_PACE,
+                            &in->b_can_pace_control );
             in->b_can_rate_control = in->b_can_pace_control;
             in->b_rescale_ts = true;
 
-            access_Control( in->p_access, ACCESS_CAN_PAUSE, &in->b_can_pause );
+            access_Control( p_access, ACCESS_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 );
 
-            access_Control( in->p_access, ACCESS_CAN_SEEK, &b_can_seek );
+            access_Control( p_access, ACCESS_CAN_SEEK, &b_can_seek );
             var_SetBool( p_input, "can-seek", b_can_seek );
+
+            access_Control( p_access, ACCESS_GET_PTS_DELAY, &i_pts_delay );
         }
 
+        /* Access-forced demuxer (PARENTAL ADVISORY: EXPLICIT HACK) */
+        if( !*psz_demux && *p_access->psz_demux )
+            psz_demux = p_access->psz_demux;
+
         /* */
         int  i_input_list;
         char **ppsz_input_list;
@@ -2538,7 +2546,7 @@ static int InputSourceInit( input_thread_t *p_input,
             TAB_APPEND( i_input_list, ppsz_input_list, NULL );
 
         /* Create the stream_t */
-        in->p_stream = stream_AccessNew( in->p_access, ppsz_input_list );
+        in->p_stream = stream_AccessNew( p_access, ppsz_input_list );
         if( ppsz_input_list )
         {
             for( int i = 0; ppsz_input_list[i] != NULL; i++ )
@@ -2560,12 +2568,6 @@ static int InputSourceInit( input_thread_t *p_input,
                                               var_GetBool( p_input, "input-record-native" ) );
         free( psz_stream_filter );
 
-        /* Open a demuxer */
-        if( *psz_demux == '\0' && *in->p_access->psz_demux )
-        {
-            psz_demux = in->p_access->psz_demux;
-        }
-
         in->p_demux = demux_New( p_input, p_input, psz_access, psz_demux,
                    /* Take access/stream redirections into account: */
                    in->p_stream->psz_path ? in->p_stream->psz_path : psz_path,
@@ -2602,6 +2604,7 @@ static int InputSourceInit( input_thread_t *p_input,
                 in->b_title_demux = true;
             }
         }
+        in->p_access = p_access; /* <- TODO: remove this nasty pointer */
     }
 
     free( psz_var_demux );
@@ -2638,12 +2641,7 @@ static int InputSourceInit( input_thread_t *p_input,
          * fallback to access */
         if( demux_Control( in->p_demux, DEMUX_GET_PTS_DELAY,
                            &in->i_pts_delay ) )
-        {
-            /* GET_PTS_DELAY is mandatory for access_demux */
-            assert( in->p_access );
-            access_Control( in->p_access,
-                            ACCESS_GET_PTS_DELAY, &in->i_pts_delay );
-        }
+            in->i_pts_delay = 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