[vlc-devel] commit: Make media player a VLC object ( Rémi Denis-Courmont )

git version control git at videolan.org
Sun Jan 31 17:57:34 CET 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Jan 31 18:45:12 2010 +0200| [e49d07aa5168d20550034383ab95d9fed15e0263] | committer: Rémi Denis-Courmont 

Make media player a VLC object

This will make variable inheritance to child inputs much simpler

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e49d07aa5168d20550034383ab95d9fed15e0263
---

 src/control/media_player.c          |   20 ++++++++++----------
 src/control/media_player_internal.h |    2 ++
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/control/media_player.c b/src/control/media_player.c
index 1be7112..7911ce8 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 955491c..cf22cc0 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;




More information about the vlc-devel mailing list