]> git.sesse.net Git - vlc/blobdiff - src/control/input.c
Improve drag&drop handling
[vlc] / src / control / input.c
index 2b248a5506befecf4b48c6071a0a738df5b37a29..d9166092ba6db8d64a17f63919e3664e523a26f4 100644 (file)
@@ -44,8 +44,8 @@ input_thread_t *libvlc_get_input_thread( libvlc_input_t *p_input,
     if( !p_input ) 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 ) RAISENULL( "Input does not exist" );
 
     return p_input_thread;
@@ -63,12 +63,12 @@ vlc_int64_t libvlc_input_get_length( libvlc_input_t *p_input,
     vlc_value_t val;
 
     p_input_thread = libvlc_get_input_thread ( p_input, p_e);
-    if( libvlc_exception_raised( p_e ) )  return -1.0;
+    if( libvlc_exception_raised( p_e ) )  return -1;
        
     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,
@@ -78,11 +78,11 @@ vlc_int64_t libvlc_input_get_time( libvlc_input_t *p_input,
     vlc_value_t val;
 
     p_input_thread = libvlc_get_input_thread ( p_input, p_e );
-    if( libvlc_exception_raised( p_e ) )  return -1.0;
+    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,
@@ -94,7 +94,7 @@ void libvlc_input_set_time( libvlc_input_t *p_input, vlc_int64_t time,
     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 );
 }
@@ -165,3 +165,52 @@ vlc_bool_t libvlc_input_will_play( libvlc_input_t *p_input,
     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 0;
+
+    var_Get( p_input_thread, "state", &val );
+    vlc_object_release( p_input_thread );
+
+    return val.i_int;
+}
+