From c9e0e4e1aefb7a65d76d8ffb57a13a1c40dfaabc Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Thu, 7 Jun 2007 20:46:39 +0000 Subject: [PATCH] control/event.c: Send position event at a reasonable time precision. --- src/control/event.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/control/event.c b/src/control/event.c index 849b62b29d..170bc01d52 100644 --- a/src/control/event.c +++ b/src/control/event.c @@ -39,19 +39,23 @@ static int handle_event( vlc_object_t *p_this, char const *psz_cmd, * facility for p_data */ struct libvlc_callback_entry_t *entry = p_data; libvlc_event_t event; + event.type = entry->i_event_type; - switch ( event.type ) + + if (event.type == INPUT_POSITION_CHANGED && !strcmp(psz_cmd, "intf-change")) { - case VOLUME_CHANGED: - event.value_type = BOOLEAN_EVENT; - break; - case INPUT_POSITION_CHANGED: - break; - default: - break; + input_thread_t * p_input = (input_thread_t *)p_this; + vlc_value_t val; + var_Get( p_input, "position", &val ); + + /* Only send event at a reasonable time precision (500ms) */ + /* (FIXME: this should be configurable) */ + if ((val.i_time % I64C(500000)) != 0) + { + /* Don't send this event */ + return VLC_SUCCESS; + } } - event.old_value = oldval; - event.new_value = newval; /* Call the client entry */ entry->f_callback( entry->p_instance, &event, entry->p_user_data ); @@ -95,6 +99,7 @@ static int install_input_event( vlc_object_t *p_this, char const *psz_cmd, /* FIXME: here we shouldn't listen on intf-change, we have to provide * in vlc core a more accurate callback */ var_AddCallback( p_input, "intf-change", handle_event, p_listitem->elmt ); + var_AddCallback( p_input, "position", handle_event, p_listitem->elmt ); } } @@ -144,6 +149,8 @@ static int remove_variable_callback( libvlc_instance_t *p_instance, * will be a no-op */ var_DelCallback( p_input, "intf-change", handle_event, p_entry ); + var_DelCallback( p_input, "position", + handle_event, p_entry ); break; } -- 2.39.5