+/*
+ * input_position_changed (Private) (input var "intf-change" Callback)
+ */
+static int
+input_position_changed( vlc_object_t * p_this, char const * psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval,
+ void * p_userdata )
+{
+ libvlc_media_instance_t * p_mi = p_userdata;
+ vlc_value_t val;
+
+ if (!strcmp(psz_cmd, "intf" /* "-change" no need to go further */))
+ {
+ input_thread_t * p_input = (input_thread_t *)p_this;
+ var_Get( p_input, "position", &val );
+
+ if ((val.i_time % I64C(500000)) != 0)
+ return VLC_SUCCESS; /* No need to have a better precision */
+ var_Get( p_input, "state", &val );
+
+ if( val.i_int != PLAYING_S )
+ return VLC_SUCCESS; /* Don't send the position while stopped */
+ }
+ else
+ val.i_time = newval.i_time;
+
+ libvlc_event_t event;
+ event.type = libvlc_MediaInstancePositionChanged;
+ event.u.media_instance_position_changed.new_position = val.i_time;
+
+ libvlc_event_send( p_mi->p_event_manager, &event );
+ return VLC_SUCCESS;
+}
+