vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Oct 20 19:50:44 2015 +0300| [567822715f7dab6925fd17e7be7abd954cc18154] | committer: Rémi Denis-Courmont
demux: add some controls to demux_vaControlHelper() > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=567822715f7dab6925fd17e7be7abd954cc18154 --- src/input/demux.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/input/demux.c b/src/input/demux.c index 189bdca..a8a07de 100644 --- a/src/input/demux.c +++ b/src/input/demux.c @@ -25,6 +25,8 @@ # include "config.h" #endif +#include <assert.h> + #include "demux.h" #include <libvlc.h> #include <vlc_codec.h> @@ -257,6 +259,9 @@ void demux_Delete( demux_t *p_demux ) stream_Delete( s ); } +#define static_control_match(foo) \ + static_assert((unsigned) DEMUX_##foo == STREAM_##foo, "Mismatch") + /***************************************************************************** * demux_vaControlHelper: *****************************************************************************/ @@ -274,8 +279,33 @@ int demux_vaControlHelper( stream_t *s, if( i_align <= 0 ) i_align = 1; i_tell = stream_Tell( s ); + static_control_match(CAN_PAUSE); + static_control_match(CAN_CONTROL_PACE); + static_control_match(GET_PTS_DELAY); + static_control_match(GET_META); + static_control_match(GET_SIGNAL); + static_control_match(SET_PAUSE_STATE); + switch( i_query ) { + case DEMUX_CAN_SEEK: + { + bool *b = va_arg( args, bool * ); + + if( (i_bitrate <= 0 && i_start >= i_end) + || stream_Control( s, STREAM_CAN_SEEK, b ) ) + *b = false; + break; + } + + case DEMUX_CAN_PAUSE: + case DEMUX_CAN_CONTROL_PACE: + case DEMUX_GET_PTS_DELAY: + case DEMUX_GET_META: + case DEMUX_GET_SIGNAL: + case DEMUX_SET_PAUSE_STATE: + return stream_vaControl( s, i_query, args ); + case DEMUX_GET_LENGTH: pi64 = (int64_t*)va_arg( args, int64_t * ); if( i_bitrate > 0 && i_end > i_start ) @@ -332,14 +362,10 @@ int demux_vaControlHelper( stream_t *s, } return VLC_EGENERIC; - case DEMUX_GET_META: - return stream_vaControl( s, STREAM_GET_META, args ); - case DEMUX_IS_PLAYLIST: *va_arg( args, bool * ) = false; return VLC_SUCCESS; - case DEMUX_GET_PTS_DELAY: case DEMUX_GET_FPS: case DEMUX_HAS_UNSUPPORTED_META: case DEMUX_SET_NEXT_DEMUX_TIME: @@ -348,14 +374,17 @@ int demux_vaControlHelper( stream_t *s, case DEMUX_SET_ES: case DEMUX_GET_ATTACHMENTS: case DEMUX_CAN_RECORD: - case DEMUX_SET_RECORD_STATE: - case DEMUX_GET_SIGNAL: return VLC_EGENERIC; + case DEMUX_SET_TITLE: + case DEMUX_SET_SEEKPOINT: + case DEMUX_SET_RECORD_STATE: + assert(0); default: msg_Err( s, "unknown query in demux_vaControlDefault" ); return VLC_EGENERIC; } + return VLC_SUCCESS; } /**************************************************************************** _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
