* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include <libvlc_internal.h>
-#include <vlc_demux.h>
+#include "libvlc_internal.h"
#include <vlc/libvlc.h>
-
-#include <vlc/intf.h>
+#include <vlc_demux.h>
+#include <vlc_input.h>
void libvlc_input_free( libvlc_input_t *p_input )
{
- if( p_input )
- free( p_input );
+ if( p_input ) free( 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_e );
+ if( libvlc_exception_raised( p_e ) )
+ return -1;
- p_input_thread = libvlc_get_input_thread ( p_input, p_exception);
+ var_Get( p_input_thread , "time", &val );
+ vlc_object_release( p_input_thread );
+ return (val.i_time+500LL)/1000LL;
+}
- if ( libvlc_exception_raised( p_exception ) )
- return -1.0;
+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;
- var_Get( p_input_thread , "time", &val );
+ p_input_thread = libvlc_get_input_thread ( p_input, p_e );
+ if( libvlc_exception_raised( p_e ) )
+ return;
+
+ value.i_time = time*1000LL;
+ var_Set( p_input_thread, "time", value );
vlc_object_release( p_input_thread );
+}
+
+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_e);
+ if ( libvlc_exception_raised( p_e ) )
+ return;
- return val.i_time / 1000;
+ var_Set( p_input_thread, "position", val );
+ vlc_object_release( p_input_thread );
}
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 );
}
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( input_GetItem(p_input_thread), DEMUX_GET_FPS, &f_fps )
+ || f_fps < 0.1 )
{
vlc_object_release( p_input_thread );
- return 0;
+ return 0.0;
}
else
{
}
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 )
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;
+}
+