From 23942f1f36db6ab5ed4272da903c054336bed5ee Mon Sep 17 00:00:00 2001 From: Damien Fouilleul Date: Mon, 25 Jun 2007 18:06:52 +0000 Subject: [PATCH] - libvlc APIs: bug fixing, and please note that exception argument is OPTIONAL (can be null), do not use exception to control API flow unless you created your own --- src/control/event.c | 10 ++++++---- src/control/media_instance.c | 12 +++++++++--- src/control/playlist.c | 12 ++++++++++-- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/control/event.c b/src/control/event.c index d67c148ef1..a44b247383 100644 --- a/src/control/event.c +++ b/src/control/event.c @@ -89,18 +89,17 @@ static int handle_event( vlc_object_t *p_this, char const *psz_cmd, **************************************************************************/ static input_thread_t * get_input(libvlc_instance_t * p_instance) { - libvlc_exception_t p_e_unused; /* FIXME: error checking here */ libvlc_media_instance_t * p_mi; input_thread_t * p_input; - p_mi = libvlc_playlist_get_media_instance( p_instance, &p_e_unused ); + p_mi = libvlc_playlist_get_media_instance( p_instance, NULL ); if( !p_mi ) return NULL; - p_input = libvlc_get_input_thread( p_mi, &p_e_unused ); + p_input = libvlc_get_input_thread( p_mi, NULL ); - libvlc_media_instance_destroy( p_mi ); + libvlc_media_instance_release( p_mi ); return p_input; } @@ -119,6 +118,9 @@ static int install_input_event( vlc_object_t *p_this, char const *psz_cmd, struct libvlc_callback_entry_list_t *p_listitem; input_thread_t * p_input = get_input( p_instance ); + if( !p_input ) + return; + vlc_mutex_lock( &p_instance->instance_lock ); p_listitem = p_instance->p_callback_list; diff --git a/src/control/media_instance.c b/src/control/media_instance.c index d8c9b74e0d..f1531e2627 100644 --- a/src/control/media_instance.c +++ b/src/control/media_instance.c @@ -138,12 +138,18 @@ libvlc_media_instance_t * libvlc_media_instance_new_from_input_thread( { libvlc_media_instance_t * p_mi; + if( !p_input ) + { + libvlc_exception_raise( p_e, "invalid input thread" ); + return NULL; + } + p_mi = malloc( sizeof(libvlc_media_instance_t) ); p_mi->p_md = libvlc_media_descriptor_new_from_input_item( p_libvlc_instance, p_input->p->input.p_item, p_e ); - if( libvlc_exception_raised( p_e ) ) + if( !p_mi->p_md ) { free( p_mi ); return NULL; @@ -266,7 +272,7 @@ void libvlc_media_instance_play( libvlc_media_instance_t *p_mi, /* A thread alread exists, send it a play message */ p_input_thread = libvlc_get_input_thread( p_mi, p_e ); - if( libvlc_exception_raised( p_e ) ) + if( !p_input_thread ) return; input_Control( p_input_thread, INPUT_CONTROL_SET_STATE, PLAYING_S ); @@ -300,7 +306,7 @@ void libvlc_media_instance_pause( libvlc_media_instance_t *p_mi, p_input_thread = libvlc_get_input_thread( p_mi, p_e ); - if( libvlc_exception_raised( p_e ) ) + if( !p_input_thread ) return; input_Control( p_input_thread, INPUT_CONTROL_SET_STATE, val ); diff --git a/src/control/playlist.c b/src/control/playlist.c index eaa60d0def..4d453af250 100644 --- a/src/control/playlist.c +++ b/src/control/playlist.c @@ -219,9 +219,17 @@ libvlc_media_instance_t * libvlc_playlist_get_media_instance( assert( PL ); vlc_mutex_lock( &PL->object_lock ); - p_mi = libvlc_media_instance_new_from_input_thread( - p_instance, PL->p_input, p_e ); + if( PL->p_input ) + { + p_mi = libvlc_media_instance_new_from_input_thread( + p_instance, PL->p_input, p_e ); + } + else + /* no active input */ + p_mi = NULL; + vlc_mutex_unlock( &PL->object_lock ); return p_mi; } + -- 2.39.2