From bae7c730d18969a1872770fc9d1a6f587dae66c5 Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Fri, 4 Jan 2008 02:36:00 +0000 Subject: [PATCH] input/input.c: Define DEMUX_CAN_SEEK and correctly set "seekable" accordingly. (This could introduce regression such as seekable item no more seekable, but I should have greped enough...). --- include/vlc_demux.h | 2 ++ modules/access/dc1394.c | 1 + modules/access/dshow/dshow.cpp | 1 + modules/access/dvdnav.c | 1 + modules/access/dvdread.c | 1 + modules/access/fake.c | 1 + modules/access/jack.c | 5 +++++ modules/access/screen/screen.c | 1 + modules/access/v4l.c | 1 + modules/access/v4l2.c | 1 + modules/demux/live555.cpp | 1 + src/input/input.c | 7 ++++--- 12 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/vlc_demux.h b/include/vlc_demux.h index 45b3c8765c..5357cb4c1d 100644 --- a/include/vlc_demux.h +++ b/include/vlc_demux.h @@ -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 ) ); diff --git a/modules/access/dc1394.c b/modules/access/dc1394.c index 1312355bd1..6cde55e460 100644 --- a/modules/access/dc1394.c +++ b/modules/access/dc1394.c @@ -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 * ); diff --git a/modules/access/dshow/dshow.cpp b/modules/access/dshow/dshow.cpp index 213dcaf5b5..dc0f42149a 100644 --- a/modules/access/dshow/dshow.cpp +++ b/modules/access/dshow/dshow.cpp @@ -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 * ); diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c index 03daa723ec..05173aad34 100644 --- a/modules/access/dvdnav.c +++ b/modules/access/dvdnav.c @@ -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 * ); diff --git a/modules/access/dvdread.c b/modules/access/dvdread.c index 7638181659..cbc28544ec 100644 --- a/modules/access/dvdread.c +++ b/modules/access/dvdread.c @@ -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 * ); diff --git a/modules/access/fake.c b/modules/access/fake.c index b4a2cb1c20..1e21733361 100644 --- a/modules/access/fake.c +++ b/modules/access/fake.c @@ -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; diff --git a/modules/access/jack.c b/modules/access/jack.c index cf31d5f101..47eeae376b 100644 --- a/modules/access/jack.c +++ b/modules/access/jack.c @@ -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: diff --git a/modules/access/screen/screen.c b/modules/access/screen/screen.c index 223c2593ea..223cc46b98 100644 --- a/modules/access/screen/screen.c +++ b/modules/access/screen/screen.c @@ -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 * ); diff --git a/modules/access/v4l.c b/modules/access/v4l.c index f8f49be7d5..7efc65f5a6 100644 --- a/modules/access/v4l.c +++ b/modules/access/v4l.c @@ -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 * ); diff --git a/modules/access/v4l2.c b/modules/access/v4l2.c index f5a3293132..0ded317868 100644 --- a/modules/access/v4l2.c +++ b/modules/access/v4l2.c @@ -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 * ); diff --git a/modules/demux/live555.cpp b/modules/demux/live555.cpp index 20f46061f0..648a800fc3 100644 --- a/modules/demux/live555.cpp +++ b/modules/demux/live555.cpp @@ -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 */ diff --git a/src/input/input.c b/src/input/input.c index e26d194959..9fd3eb4fc9 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -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 { -- 2.39.2