input/input.c: Define DEMUX_CAN_SEEK and correctly set "seekable" accordingly. (This...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Fri, 4 Jan 2008 02:36:00 +0000 (02:36 +0000)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Fri, 4 Jan 2008 02:36:00 +0000 (02:36 +0000)
12 files changed:
include/vlc_demux.h
modules/access/dc1394.c
modules/access/dshow/dshow.cpp
modules/access/dvdnav.c
modules/access/dvdread.c
modules/access/fake.c
modules/access/jack.c
modules/access/screen/screen.c
modules/access/v4l.c
modules/access/v4l2.c
modules/demux/live555.cpp
src/input/input.c

index 45b3c87..5357cb4 100644 (file)
@@ -140,6 +140,8 @@ enum demux_query_e
     /* DEMUX_SET_RATE is called only if DEMUX_CAN_CONTROL_RATE has returned true.
      * It should return the value really used in *pi_rate */
     DEMUX_SET_RATE,             /* arg1= int*pi_rate                                        can fail */
+
+    DEMUX_CAN_SEEK,            /* arg1= vlc_bool_t*    can fail (assume false)*/
 };
 
 VLC_EXPORT( int,       demux2_vaControlHelper, ( stream_t *, int64_t i_start, int64_t i_end, int i_bitrate, int i_align, int i_query, va_list args ) );
index 1312355..6cde55e 100644 (file)
@@ -802,6 +802,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
     {
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_SET_PAUSE_STATE:
         case DEMUX_CAN_CONTROL_PACE:
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index 213dcaf..dc0f421 100644 (file)
@@ -1795,6 +1795,7 @@ static int DemuxControl( demux_t *p_demux, int i_query, va_list args )
     {
     /* Special for access_demux */
     case DEMUX_CAN_PAUSE:
+    case DEMUX_CAN_SEEK:
     case DEMUX_SET_PAUSE_STATE:
     case DEMUX_CAN_CONTROL_PACE:
         pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index 03daa72..05173aa 100644 (file)
@@ -447,6 +447,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
 
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_CAN_CONTROL_PACE:
             /* TODO */
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index 7638181..cbc2854 100644 (file)
@@ -406,6 +406,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
 
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_CAN_CONTROL_PACE:
             /* TODO */
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index b4a2cb1..1e21733 100644 (file)
@@ -142,6 +142,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
     {
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_CAN_CONTROL_PACE:
             pb = (vlc_bool_t *)va_arg( args, vlc_bool_t * );
             *pb = VLC_TRUE;
index cf31d5f..47eeae3 100644 (file)
@@ -343,6 +343,11 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
     {
     /* Special for access_demux */
     case DEMUX_CAN_PAUSE:
+    case DEMUX_CAN_SEEK:
+        pb = (vlc_bool_t *)va_arg( args, vlc_bool_t * );
+        *pb = VLC_TRUE;
+        return VLC_SUCCESS;
+
     case DEMUX_SET_PAUSE_STATE:
         return VLC_SUCCESS;
     case DEMUX_CAN_CONTROL_PACE:
index 223c259..223cc46 100644 (file)
@@ -176,6 +176,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
     {
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_CAN_CONTROL_PACE:
             /* TODO */
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index f8f49be..7efc65f 100644 (file)
@@ -581,6 +581,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
     {
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_SET_PAUSE_STATE:
         case DEMUX_CAN_CONTROL_PACE:
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index f5a3293..0ded317 100644 (file)
@@ -991,6 +991,7 @@ static int DemuxControl( demux_t *p_demux, int i_query, va_list args )
     {
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
         case DEMUX_SET_PAUSE_STATE:
         case DEMUX_CAN_CONTROL_PACE:
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
index 20f4606..648a800 100644 (file)
@@ -1256,6 +1256,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
         }
         /* Special for access_demux */
         case DEMUX_CAN_PAUSE:
+        case DEMUX_CAN_SEEK:
             pb = (vlc_bool_t*)va_arg( args, vlc_bool_t * );
             if( p_sys->rtsp && p_sys->i_npt_length )
                 /* Not always true, but will be handled in SET_PAUSE_STATE */
index e26d194..9fd3eb4 100644 (file)
@@ -2266,10 +2266,11 @@ static int InputSourceInit( input_thread_t *p_input,
                             &in->b_can_pause ) )
             in->b_can_pause = VLC_FALSE;
 
-        /* FIXME todo
-        demux2_Control( in->p_demux, DEMUX_CAN_SEEK,
+        int ret = demux2_Control( in->p_demux, DEMUX_CAN_SEEK,
                         &val.b_bool );
-        */
+        if( ret != VLC_SUCCESS )
+            val.b_bool = VLC_FALSE;
+        var_Set( p_input, "seekable", val );
     }
     else
     {