From: RĂ©mi Denis-Courmont Date: Sun, 31 Jan 2010 16:45:12 +0000 (+0200) Subject: Make media player a VLC object X-Git-Tag: 1.1.0-ff~595 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e49d07aa5168d20550034383ab95d9fed15e0263;p=vlc Make media player a VLC object This will make variable inheritance to child inputs much simpler --- diff --git a/src/control/media_player.c b/src/control/media_player.c index 1be7112f04..7911ce813b 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -343,13 +343,13 @@ libvlc_media_player_new( libvlc_instance_t *instance, libvlc_exception_t *e ) assert(instance); - mp = malloc(sizeof(libvlc_media_player_t)); - if (!mp) + mp = vlc_object_create (instance->p_libvlc_int, sizeof(*mp)); + if (unlikely(mp == NULL)) { - libvlc_exception_raise(e); libvlc_printerr("Not enough memory"); return NULL; } + vlc_object_attach (mp, mp->p_libvlc); mp->p_md = NULL; mp->drawable.agl = 0; mp->drawable.xid = 0; @@ -364,7 +364,7 @@ libvlc_media_player_new( libvlc_instance_t *instance, libvlc_exception_t *e ) mp->p_event_manager = libvlc_event_manager_new(mp, instance); if (unlikely(mp->p_event_manager == NULL)) { - free(mp); + vlc_object_release(mp); return NULL; } vlc_mutex_init(&mp->object_lock); @@ -399,7 +399,7 @@ libvlc_media_player_new( libvlc_instance_t *instance, libvlc_exception_t *e ) * FIXME: It's unclear why we want to put this in public API, and why we * want to expose it in such a limiting and ugly way. */ - var_AddCallback(instance->p_libvlc_int, "snapshot-file", snapshot_was_taken, mp); + var_AddCallback(mp->p_libvlc, "snapshot-file", snapshot_was_taken, mp); return mp; } @@ -434,7 +434,7 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi ) assert( p_mi ); /* Detach Callback from the main libvlc object */ - var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int, + var_DelCallback( p_mi->p_libvlc, "snapshot-file", snapshot_was_taken, p_mi ); /* If the input thread hasn't been already deleted it means @@ -454,7 +454,7 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi ) libvlc_event_manager_release( p_mi->p_event_manager ); libvlc_media_release( p_mi->p_md ); vlc_mutex_destroy( &p_mi->object_lock ); - free( p_mi ); + vlc_object_release( p_mi ); } /************************************************************************** @@ -589,9 +589,9 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi, return; } - p_mi->p_input_thread = input_Create( p_mi->p_libvlc_instance->p_libvlc_int, - p_mi->p_md->p_input_item, NULL, p_mi->p_input_resource ); - + p_mi->p_input_thread = input_Create( p_mi, + p_mi->p_md->p_input_item, NULL, + p_mi->p_input_resource ); if( !p_mi->p_input_thread ) { unlock(p_mi); diff --git a/src/control/media_player_internal.h b/src/control/media_player_internal.h index 955491c5e5..cf22cc071e 100644 --- a/src/control/media_player_internal.h +++ b/src/control/media_player_internal.h @@ -36,6 +36,8 @@ struct libvlc_media_player_t { + VLC_COMMON_MEMBERS + int i_refcount; vlc_mutex_t object_lock; input_thread_t * p_input_thread;