X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Finput.c;h=825c828a9b9d00e82a37aa25a79e1fcce0767bd6;hb=db602ee3cfc392c9a30d4048981bd083497c1d46;hp=bb48e8581e9c706caec662bfc13ef01da3ead07e;hpb=8914d39a96c9131b1cbfc8f93869d310c16e9c34;p=vlc diff --git a/src/control/input.c b/src/control/input.c index bb48e8581e..825c828a9b 100644 --- a/src/control/input.c +++ b/src/control/input.c @@ -29,8 +29,7 @@ void libvlc_input_free( libvlc_input_t *p_input ) { - if( p_input ) - free( p_input ); + if( p_input ) free( p_input ); } /* @@ -43,111 +42,90 @@ input_thread_t *libvlc_get_input_thread( libvlc_input_t *p_input, input_thread_t *p_input_thread; if( !p_input ) - { - libvlc_exception_raise( p_e, "Input is NULL" ); - return NULL; - } + RAISENULL( "Input is NULL" ); p_input_thread = (input_thread_t*)vlc_object_get( - p_input->p_instance->p_vlc, - p_input->i_input_id ); + p_input->p_instance->p_libvlc_int, + p_input->i_input_id ); if( !p_input_thread ) - { - libvlc_exception_raise( p_e, "Input does not exist" ); - return NULL; - } + RAISENULL( "Input does not exist" ); return p_input_thread; } - /************************************************************************** * Getters for stream information **************************************************************************/ vlc_int64_t libvlc_input_get_length( libvlc_input_t *p_input, - libvlc_exception_t *p_exception ) + libvlc_exception_t *p_e ) { input_thread_t *p_input_thread; vlc_value_t val; - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); + p_input_thread = libvlc_get_input_thread ( p_input, p_e); + if( libvlc_exception_raised( p_e ) ) + return -1; - if ( libvlc_exception_raised( p_exception ) ) - return -1.0; - var_Get( p_input_thread, "length", &val ); vlc_object_release( p_input_thread ); - return val.i_time / 1000; + return (val.i_time+500LL)/1000LL; } vlc_int64_t libvlc_input_get_time( libvlc_input_t *p_input, - libvlc_exception_t *p_exception ) + libvlc_exception_t *p_e ) { input_thread_t *p_input_thread; vlc_value_t val; - - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); - - if ( libvlc_exception_raised( p_exception ) ) - return -1.0; + p_input_thread = libvlc_get_input_thread ( p_input, p_e ); + if( libvlc_exception_raised( p_e ) ) + return -1; var_Get( p_input_thread , "time", &val ); vlc_object_release( p_input_thread ); - - return val.i_time / 1000; + return (val.i_time+500LL)/1000LL; } -void libvlc_input_set_time( libvlc_input_t *p_input, vlc_int64_t time, libvlc_exception_t *p_exception ) +void libvlc_input_set_time( libvlc_input_t *p_input, vlc_int64_t time, + libvlc_exception_t *p_e ) { input_thread_t *p_input_thread; vlc_value_t value; - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); - - if ( libvlc_exception_raised( p_exception ) ) + p_input_thread = libvlc_get_input_thread ( p_input, p_e ); + if( libvlc_exception_raised( p_e ) ) return; - - value.i_time = time; + + value.i_time = time*1000LL; var_Set( p_input_thread, "time", value ); vlc_object_release( p_input_thread ); - - return; - } -void libvlc_input_set_position( libvlc_input_t *p_input, float position, libvlc_exception_t *p_exception ) +void libvlc_input_set_position( libvlc_input_t *p_input, float position, + libvlc_exception_t *p_e ) { input_thread_t *p_input_thread; vlc_value_t val; - val.f_float = position; - - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); - if ( libvlc_exception_raised( p_exception ) ) + p_input_thread = libvlc_get_input_thread ( p_input, p_e); + if ( libvlc_exception_raised( p_e ) ) return; var_Set( p_input_thread, "position", val ); vlc_object_release( p_input_thread ); - - return; - } - - float libvlc_input_get_position( libvlc_input_t *p_input, - libvlc_exception_t *p_exception ) + libvlc_exception_t *p_e ) { input_thread_t *p_input_thread; vlc_value_t val; - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); - - if ( libvlc_exception_raised( p_exception ) ) + p_input_thread = libvlc_get_input_thread ( p_input, p_e); + if ( libvlc_exception_raised( p_e ) ) return -1.0; var_Get( p_input_thread, "position", &val ); @@ -157,17 +135,20 @@ float libvlc_input_get_position( libvlc_input_t *p_input, } float libvlc_input_get_fps( libvlc_input_t *p_input, - libvlc_exception_t *p_exception) + libvlc_exception_t *p_e) { double f_fps; input_thread_t *p_input_thread; - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); + p_input_thread = libvlc_get_input_thread ( p_input, p_e ); + if ( libvlc_exception_raised( p_e ) ) + return 0.0; - if( demux2_Control( p_input_thread->input.p_demux, DEMUX_GET_FPS, &f_fps ) || f_fps < 0.1 ) + if( demux2_Control( p_input_thread->input.p_demux, DEMUX_GET_FPS, &f_fps ) + || f_fps < 0.1 ) { vlc_object_release( p_input_thread ); - return 0; + return 0.0; } else { @@ -177,13 +158,11 @@ float libvlc_input_get_fps( libvlc_input_t *p_input, } vlc_bool_t libvlc_input_will_play( libvlc_input_t *p_input, - libvlc_exception_t *p_exception) + libvlc_exception_t *p_e) { - input_thread_t *p_input_thread; - - p_input_thread = libvlc_get_input_thread ( p_input, p_exception); - - if ( libvlc_exception_raised( p_exception ) ) + input_thread_t *p_input_thread = + libvlc_get_input_thread ( p_input, p_e); + if ( libvlc_exception_raised( p_e ) ) return VLC_FALSE; if ( !p_input_thread->b_die && !p_input_thread->b_dead ) @@ -191,7 +170,58 @@ vlc_bool_t libvlc_input_will_play( libvlc_input_t *p_input, vlc_object_release( p_input_thread ); return VLC_TRUE; } - vlc_object_release( p_input_thread ); return VLC_FALSE; } + +void libvlc_input_set_rate( libvlc_input_t *p_input, float rate, + libvlc_exception_t *p_e ) +{ + input_thread_t *p_input_thread; + vlc_value_t val; + + if( rate <= 0 ) + RAISEVOID( "Rate value is invalid" ); + + val.i_int = 1000.0f/rate; + + p_input_thread = libvlc_get_input_thread ( p_input, p_e); + if ( libvlc_exception_raised( p_e ) ) + return; + + var_Set( p_input_thread, "rate", val ); + vlc_object_release( p_input_thread ); +} + +float libvlc_input_get_rate( libvlc_input_t *p_input, + libvlc_exception_t *p_e ) +{ + input_thread_t *p_input_thread; + vlc_value_t val; + + p_input_thread = libvlc_get_input_thread ( p_input, p_e); + if ( libvlc_exception_raised( p_e ) ) + return -1.0; + + var_Get( p_input_thread, "rate", &val ); + vlc_object_release( p_input_thread ); + + return (float)1000.0f/val.i_int; +} + +int libvlc_input_get_state( libvlc_input_t *p_input, + libvlc_exception_t *p_e ) +{ + input_thread_t *p_input_thread; + vlc_value_t val; + + p_input_thread = libvlc_get_input_thread ( p_input, p_e ); + if ( libvlc_exception_raised( p_e ) ) + return 6; /* Return ERROR_S (see include/vlc_input.c) */ + + var_Get( p_input_thread, "state", &val ); + vlc_object_release( p_input_thread ); + + return val.i_int; +} +