X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fevent.c;h=af3f043c9af2a3222734360daa49d4685494d88d;hb=7d59872c455cb83be6ec6745dbd61e409d160610;hp=7b94557742354d03472df380a8b59138979de4cd;hpb=120e7e6b9b99f3604b0ac70c28ded9e97f48a69d;p=vlc diff --git a/src/control/event.c b/src/control/event.c index 7b94557742..af3f043c9a 100644 --- a/src/control/event.c +++ b/src/control/event.c @@ -17,15 +17,22 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#define LIBVLC_EVENT_TYPES_KEEP_DEFINE #include #include "libvlc_internal.h" #include "event_internal.h" +#include +#include typedef struct libvlc_event_listeners_group_t { @@ -61,15 +68,14 @@ group_contains_listener( libvlc_event_listeners_group_t * group, * Init an object's event manager. **************************************************************************/ libvlc_event_manager_t * -libvlc_event_manager_new( void * p_obj, libvlc_instance_t * p_libvlc_inst, - libvlc_exception_t *p_e ) +libvlc_event_manager_new( void * p_obj, libvlc_instance_t * p_libvlc_inst ) { libvlc_event_manager_t * p_em; p_em = malloc(sizeof( libvlc_event_manager_t )); if( !p_em ) { - libvlc_exception_raise( p_e, "No Memory left" ); + libvlc_printerr( "Not enough memory" ); return NULL; } @@ -122,17 +128,10 @@ void libvlc_event_manager_release( libvlc_event_manager_t * p_em ) **************************************************************************/ void libvlc_event_manager_register_event_type( libvlc_event_manager_t * p_em, - libvlc_event_type_t event_type, - libvlc_exception_t * p_e ) + libvlc_event_type_t event_type ) { libvlc_event_listeners_group_t * listeners_group; - listeners_group = malloc(sizeof(libvlc_event_listeners_group_t)); - if( !listeners_group ) - { - libvlc_exception_raise( p_e, "No Memory left" ); - return; - } - + listeners_group = xmalloc(sizeof(libvlc_event_listeners_group_t)); listeners_group->event_type = event_type; vlc_array_init( &listeners_group->listeners ); @@ -246,58 +245,19 @@ void libvlc_event_send( libvlc_event_manager_t * p_em, * * Get the char * name of an event type. **************************************************************************/ -static const char event_type_to_name[][35] = +static const char event_type_to_name[][libvlc_num_event_types] = { -#define EVENT(a) [a]=#a - EVENT(libvlc_MediaMetaChanged), - EVENT(libvlc_MediaSubItemAdded), - EVENT(libvlc_MediaDurationChanged), - EVENT(libvlc_MediaPreparsedChanged), - EVENT(libvlc_MediaFreed), - EVENT(libvlc_MediaStateChanged), - - EVENT(libvlc_MediaPlayerNothingSpecial), - EVENT(libvlc_MediaPlayerOpening), - EVENT(libvlc_MediaPlayerBuffering), - EVENT(libvlc_MediaPlayerPlaying), - EVENT(libvlc_MediaPlayerPaused), - EVENT(libvlc_MediaPlayerStopped), - EVENT(libvlc_MediaPlayerForward), - EVENT(libvlc_MediaPlayerBackward), - EVENT(libvlc_MediaPlayerEndReached), - EVENT(libvlc_MediaPlayerTimeChanged), - EVENT(libvlc_MediaPlayerTitleChanged), - EVENT(libvlc_MediaPlayerPositionChanged), - EVENT(libvlc_MediaPlayerSeekableChanged), - EVENT(libvlc_MediaPlayerPausableChanged), - - EVENT(libvlc_MediaListItemAdded), - EVENT(libvlc_MediaListWillAddItem), - EVENT(libvlc_MediaListItemDeleted), - EVENT(libvlc_MediaListWillDeleteItem), - - EVENT(libvlc_MediaListViewItemAdded), - EVENT(libvlc_MediaListViewWillAddItem), - EVENT(libvlc_MediaListViewItemDeleted), - EVENT(libvlc_MediaListViewWillDeleteItem), - - EVENT(libvlc_MediaListPlayerPlayed), - EVENT(libvlc_MediaListPlayerNextItemSet), - EVENT(libvlc_MediaListPlayerStopped), - - EVENT(libvlc_MediaDiscovererStarted), - EVENT(libvlc_MediaDiscovererEnded), - - EVENT(libvlc_MediaPlayerSnapshotTaken), -#undef EVENT +#define DEF(a) [libvlc_##a]=#a + DEFINE_LIBVLC_EVENT_TYPES +#undef DEF }; -static const char unkwown_event_name[] = "Unknown Event"; +static const char unknown_event_name[] = "Unknown Event"; const char * libvlc_event_type_name( libvlc_event_type_t event_type ) { - if( event_type >= sizeof(event_type_to_name)/sizeof(event_type_to_name[0])) - return unkwown_event_name; + if( event_type >= libvlc_num_event_types ) + return unknown_event_name; return event_type_to_name[event_type]; } @@ -307,23 +267,18 @@ const char * libvlc_event_type_name( libvlc_event_type_t event_type ) * Add a callback for an event. **************************************************************************/ static -void event_attach( libvlc_event_manager_t * p_event_manager, - libvlc_event_type_t event_type, - libvlc_callback_t pf_callback, - void *p_user_data, - bool is_asynchronous, - libvlc_exception_t *p_e ) +int event_attach( libvlc_event_manager_t * p_event_manager, + libvlc_event_type_t event_type, + libvlc_callback_t pf_callback, void *p_user_data, + bool is_asynchronous ) { libvlc_event_listeners_group_t * listeners_group; libvlc_event_listener_t * listener; int i; listener = malloc(sizeof(libvlc_event_listener_t)); - if( !listener ) - { - libvlc_exception_raise( p_e, "No Memory left" ); - return; - } + if( unlikely(listener == NULL) ) + return ENOMEM; listener->event_type = event_type; listener->p_user_data = p_user_data; @@ -338,15 +293,16 @@ void event_attach( libvlc_event_manager_t * p_event_manager, { vlc_array_append( &listeners_group->listeners, listener ); vlc_mutex_unlock( &p_event_manager->object_lock ); - return; + return 0; } } vlc_mutex_unlock( &p_event_manager->object_lock ); free(listener); - libvlc_exception_raise( p_e, - "This object event manager doesn't know about '%s' events", - libvlc_event_type_name(event_type)); + fprintf( stderr, "This object event manager doesn't know about '%s' events", + libvlc_event_type_name(event_type) ); + assert(0); + return -1; } /************************************************************************** @@ -354,13 +310,13 @@ void event_attach( libvlc_event_manager_t * p_event_manager, * * Add a callback for an event. **************************************************************************/ -void libvlc_event_attach( libvlc_event_manager_t * p_event_manager, +int libvlc_event_attach( libvlc_event_manager_t * p_event_manager, libvlc_event_type_t event_type, libvlc_callback_t pf_callback, - void *p_user_data, - libvlc_exception_t *p_e ) + void *p_user_data ) { - event_attach(p_event_manager, event_type, pf_callback, p_user_data, false /* synchronous */, p_e); + return event_attach(p_event_manager, event_type, pf_callback, p_user_data, + false /* synchronous */); } /************************************************************************** @@ -371,10 +327,10 @@ void libvlc_event_attach( libvlc_event_manager_t * p_event_manager, void libvlc_event_attach_async( libvlc_event_manager_t * p_event_manager, libvlc_event_type_t event_type, libvlc_callback_t pf_callback, - void *p_user_data, - libvlc_exception_t *p_e ) + void *p_user_data ) { - event_attach(p_event_manager, event_type, pf_callback, p_user_data, true /* asynchronous */, p_e); + event_attach(p_event_manager, event_type, pf_callback, p_user_data, + true /* asynchronous */); } /************************************************************************** @@ -385,8 +341,7 @@ void libvlc_event_attach_async( libvlc_event_manager_t * p_event_manager, void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, libvlc_event_type_t event_type, libvlc_callback_t pf_callback, - void *p_user_data, - libvlc_exception_t *p_e ) + void *p_user_data ) { libvlc_event_listeners_group_t * listeners_group; libvlc_event_listener_t * listener; @@ -433,10 +388,5 @@ void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, libvlc_event_async_ensure_listener_removal(p_event_manager, &listener_to_remove); - if(!found) - { - libvlc_exception_raise( p_e, - "This object event manager doesn't know about '%s,%p,%p' event observer", - libvlc_event_type_name(event_type), pf_callback, p_user_data ); - } + assert(found); }