From cd728cd06e00be3c601edbfcf6c5a9f79524d95c Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Thu, 11 Dec 2008 23:03:32 +0100 Subject: [PATCH] Do not use 2 event manager in input. --- include/vlc_input.h | 7 --- src/control/media_player.c | 117 ++++++++++++++++--------------------- src/input/event.c | 12 ---- src/input/input.c | 15 ----- src/input/input_internal.h | 3 - src/libvlccore.sym | 1 - src/playlist/engine.c | 43 ++++++-------- 7 files changed, 70 insertions(+), 128 deletions(-) diff --git a/include/vlc_input.h b/include/vlc_input.h index 048be2d6af..1ddf852b44 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -673,13 +673,6 @@ static inline int input_AddSubtitle( input_thread_t *p_input, const char *psz_ur return input_Control( p_input, INPUT_ADD_SUBTITLE, psz_url, b_check_extension ); } -/** - * It will return the input event manager. - * - * You are advised to use "intf-event" instead if you want completness. - */ -VLC_EXPORT( vlc_event_manager_t *, input_GetEventManager, ( input_thread_t * ) ); - /* */ typedef struct input_clock_t input_clock_t; VLC_EXPORT( decoder_t *, input_DecoderNew, ( input_thread_t *, es_format_t *, input_clock_t *, sout_instance_t * ) ); diff --git a/src/control/media_player.c b/src/control/media_player.c index 733f2b3b93..8cd0cefad5 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -29,9 +29,6 @@ #include #include "libvlc.h" -static void -input_state_changed( const vlc_event_t * event, void * p_userdata ); - static int input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd, vlc_value_t oldval, vlc_value_t newval, @@ -83,8 +80,6 @@ static void release_input_thread( libvlc_media_player_t *p_mi ) /* No one is tracking this input_thread appart us. Destroy it */ if( p_mi->b_own_its_input_thread ) { - vlc_event_manager_t * p_em = input_GetEventManager( p_input_thread ); - vlc_event_detach( p_em, vlc_InputStateChanged, input_state_changed, p_mi ); var_DelCallback( p_input_thread, "can-seek", input_seekable_changed, p_mi ); var_DelCallback( p_input_thread, "can-pause", input_pausable_changed, p_mi ); var_DelCallback( p_input_thread, "intf-event", input_event_changed, p_mi ); @@ -130,51 +125,6 @@ input_thread_t *libvlc_get_input_thread( libvlc_media_player_t *p_mi, return p_input_thread; } -/* - * input_state_changed (Private) (vlc_InputStateChanged callback) - */ -static void -input_state_changed( const vlc_event_t * event, void * p_userdata ) -{ - libvlc_media_player_t * p_mi = p_userdata; - libvlc_event_t forwarded_event; - libvlc_event_type_t type = event->u.input_state_changed.new_state; - - switch ( type ) - { - case INIT_S: - libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL); - forwarded_event.type = libvlc_MediaPlayerNothingSpecial; - break; - case OPENING_S: - libvlc_media_set_state( p_mi->p_md, libvlc_Opening, NULL); - forwarded_event.type = libvlc_MediaPlayerOpening; - break; - case PLAYING_S: - libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL); - forwarded_event.type = libvlc_MediaPlayerPlaying; - break; - case PAUSE_S: - libvlc_media_set_state( p_mi->p_md, libvlc_Paused, NULL); - forwarded_event.type = libvlc_MediaPlayerPaused; - break; - case END_S: - libvlc_media_set_state( p_mi->p_md, libvlc_Ended, NULL); - forwarded_event.type = libvlc_MediaPlayerEndReached; - break; - case ERROR_S: - libvlc_media_set_state( p_mi->p_md, libvlc_Error, NULL); - forwarded_event.type = libvlc_MediaPlayerEncounteredError; - break; - - default: - return; - } - - libvlc_event_send( p_mi->p_event_manager, &forwarded_event ); - return; -} - static int input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd, vlc_value_t oldval, vlc_value_t newval, @@ -223,23 +173,61 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd, libvlc_media_player_t * p_mi = p_userdata; libvlc_event_t event; - if( newval.i_int != INPUT_EVENT_TIMES ) - return VLC_EGENERIC; + assert( !strcmp( psz_cmd, "intf-event" ) ); - assert( !strcmp(psz_cmd, "intf-event" ) ); + if( newval.i_int == INPUT_EVENT_STATE ) + { + libvlc_state_t libvlc_state; - if( var_GetInteger( p_input, "state" ) != PLAYING_S ) - return VLC_SUCCESS; /* Don't send the position while stopped */ + switch ( var_GetInteger( p_input, "state" ) ) + { + case INIT_S: + libvlc_state = libvlc_NothingSpecial; + event.type = libvlc_MediaPlayerNothingSpecial; + break; + case OPENING_S: + libvlc_state = libvlc_Opening; + event.type = libvlc_MediaPlayerOpening; + break; + case PLAYING_S: + libvlc_state = libvlc_Playing; + event.type = libvlc_MediaPlayerPlaying; + break; + case PAUSE_S: + libvlc_state = libvlc_Paused; + event.type = libvlc_MediaPlayerPaused; + break; + case END_S: + libvlc_state = libvlc_Ended; + event.type = libvlc_MediaPlayerEndReached; + break; + case ERROR_S: + libvlc_state = libvlc_Error; + event.type = libvlc_MediaPlayerEncounteredError; + break; + + default: + return VLC_SUCCESS; + } - /* */ - event.type = libvlc_MediaPlayerPositionChanged; - event.u.media_player_position_changed.new_position = var_GetFloat( p_input, "position" );; - libvlc_event_send( p_mi->p_event_manager, &event ); + libvlc_media_set_state( p_mi->p_md, libvlc_state, NULL); + libvlc_event_send( p_mi->p_event_manager, &event ); + } + else if( newval.i_int == INPUT_EVENT_TIMES ) + { + if( var_GetInteger( p_input, "state" ) != PLAYING_S ) + return VLC_SUCCESS; /* Don't send the position while stopped */ - /* */ - event.type = libvlc_MediaPlayerTimeChanged; - event.u.media_player_time_changed.new_time = var_GetTime( p_input, "time" ); - libvlc_event_send( p_mi->p_event_manager, &event ); + /* */ + event.type = libvlc_MediaPlayerPositionChanged; + event.u.media_player_position_changed.new_position = var_GetFloat( p_input, "position" );; + libvlc_event_send( p_mi->p_event_manager, &event ); + + /* */ + event.type = libvlc_MediaPlayerTimeChanged; + event.u.media_player_time_changed.new_time = var_GetTime( p_input, "time" ); + libvlc_event_send( p_mi->p_event_manager, &event ); + } return VLC_SUCCESS; @@ -611,9 +599,6 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi, var_Set( p_input_thread, "drawable", val ); } - vlc_event_manager_t * p_em = input_GetEventManager( p_input_thread ); - vlc_event_attach( p_em, vlc_InputStateChanged, input_state_changed, p_mi ); - var_AddCallback( p_input_thread, "can-seek", input_seekable_changed, p_mi ); var_AddCallback( p_input_thread, "can-pause", input_pausable_changed, p_mi ); var_AddCallback( p_input_thread, "intf-event", input_event_changed, p_mi ); diff --git a/src/input/event.c b/src/input/event.c index 82c8d3ef10..999486f35e 100644 --- a/src/input/event.c +++ b/src/input/event.c @@ -147,13 +147,6 @@ void input_SendEventState( input_thread_t *p_input, int i_state ) var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_STATE ); - - /* FIXME remove this ugliness */ - vlc_event_t event; - - event.type = vlc_InputStateChanged; - event.u.input_state_changed.new_state = i_state; - vlc_event_send( &p_input->p->event_manager, &event ); } void input_SendEventCache( input_thread_t *p_input, double f_level ) @@ -301,11 +294,6 @@ void input_SendEventEsSelect( input_thread_t *p_input, int i_cat, int i_id ) var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_SETVALUE, &val, NULL ); Trigger( p_input, INPUT_EVENT_ES ); - - /* FIXME to remove this ugliness */ - vlc_event_t event; - event.type = vlc_InputSelectedStreamChanged; - vlc_event_send( &p_input->p->event_manager, &event ); } void input_SendEventTeletext( input_thread_t *p_input, int i_id ) diff --git a/src/input/input.c b/src/input/input.c index 912590d3bf..04069740a1 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -162,12 +162,6 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item, p_input->b_preparsing = b_quick; p_input->psz_header = psz_header ? strdup( psz_header ) : NULL; - /* Init events */ - vlc_event_manager_t * p_em = &p_input->p->event_manager; - vlc_event_manager_init_with_vlc_object( p_em, p_input ); - vlc_event_manager_register_event_type( p_em, vlc_InputStateChanged ); - vlc_event_manager_register_event_type( p_em, vlc_InputSelectedStreamChanged ); - /* Init Common fields */ p_input->b_eof = false; p_input->b_can_pace_control = true; @@ -324,8 +318,6 @@ static void Destructor( input_thread_t * p_input ) free( psz_name ); #endif - vlc_event_manager_fini( &p_input->p->event_manager ); - stats_TimerDump( p_input, STATS_TIMER_INPUT_LAUNCHING ); stats_TimerClean( p_input, STATS_TIMER_INPUT_LAUNCHING ); #ifdef ENABLE_SOUT @@ -3185,13 +3177,6 @@ void input_UpdateStatistic( input_thread_t *p_input, } vlc_mutex_unlock( &p_input->p->counters.counters_lock); } -/***************************************************************************** - * input_GetEventManager - *****************************************************************************/ -vlc_event_manager_t *input_GetEventManager( input_thread_t *p_input ) -{ - return &p_input->p->event_manager; -} /**/ /* TODO FIXME nearly the same logic that snapshot code */ diff --git a/src/input/input_internal.h b/src/input/input_internal.h index 978de5d833..13fd9950c1 100644 --- a/src/input/input_internal.h +++ b/src/input/input_internal.h @@ -75,9 +75,6 @@ typedef struct /** Private input fields */ struct input_thread_private_t { - /* Object's event manager */ - vlc_event_manager_t event_manager; - /* Global properties */ bool b_can_pause; bool b_can_rate_control; diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 8100012182..9dcf2d9111 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -160,7 +160,6 @@ __input_CreateThread input_DecoderDecode input_DecoderDelete input_DecoderNew -input_GetEventManager input_GetItem input_item_AddInfo input_item_AddOpt diff --git a/src/playlist/engine.c b/src/playlist/engine.c index b7eac0d57a..6e87bbb115 100644 --- a/src/playlist/engine.c +++ b/src/playlist/engine.c @@ -224,22 +224,24 @@ static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force ) } /* Input Callback */ -static void input_state_changed( const vlc_event_t * event, void * data ) +static int InputEvent( vlc_object_t *p_this, char const *psz_cmd, + vlc_value_t oldval, vlc_value_t newval, void *p_data ) { - (void)event; - playlist_t * p_playlist = data; - playlist_Signal( p_playlist ); -} + VLC_UNUSED(p_this); VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); + playlist_t *p_playlist = p_data; -/* Input Callback */ -static void input_selected_stream_changed( const vlc_event_t * event, void * data ) -{ - (void)event; - playlist_t * p_playlist = data; - PL_LOCK; - pl_priv(p_playlist)->gc_date = mdate(); - vlc_object_signal_unlocked( p_playlist ); - PL_UNLOCK; + if( newval.i_int == INPUT_EVENT_STATE ) + { + playlist_Signal( p_playlist ); + } + else if( newval.i_int == INPUT_EVENT_ES ) + { + PL_LOCK; + pl_priv(p_playlist)->gc_date = mdate(); + vlc_object_signal_unlocked( p_playlist ); + PL_UNLOCK; + } + return VLC_SUCCESS; } /* Internals */ @@ -250,12 +252,8 @@ void playlist_release_current_input( playlist_t * p_playlist ) if( !pl_priv(p_playlist)->p_input ) return; input_thread_t * p_input = pl_priv(p_playlist)->p_input; - vlc_event_manager_t * p_em = input_GetEventManager( p_input ); - vlc_event_detach( p_em, vlc_InputStateChanged, - input_state_changed, p_playlist ); - vlc_event_detach( p_em, vlc_InputSelectedStreamChanged, - input_selected_stream_changed, p_playlist ); + var_DelCallback( p_input, "intf-event", InputEvent, p_playlist ); pl_priv(p_playlist)->p_input = NULL; /* Release the playlist lock, because we may get stuck @@ -277,11 +275,8 @@ void playlist_set_current_input( { vlc_object_hold( p_input ); pl_priv(p_playlist)->p_input = p_input; - vlc_event_manager_t * p_em = input_GetEventManager( p_input ); - vlc_event_attach( p_em, vlc_InputStateChanged, - input_state_changed, p_playlist ); - vlc_event_attach( p_em, vlc_InputSelectedStreamChanged, - input_selected_stream_changed, p_playlist ); + + var_AddCallback( p_input, "intf-event", InputEvent, p_playlist ); } } -- 2.39.2