Attach the sout object to libvlc
authorRafaël Carré <funman@videolan.org>
Sun, 20 Apr 2008 19:08:35 +0000 (21:08 +0200)
committerRafaël Carré <funman@videolan.org>
Sun, 20 Apr 2008 19:08:50 +0000 (21:08 +0200)
src/input/input.c

index 0065b71..ad162a9 100644 (file)
@@ -1413,32 +1413,20 @@ static sout_instance_t *SoutFind( vlc_object_t *p_parent, input_item_t *p_item,
      * XXX it might be unusable but this will be checked later */
     if( b_keep_sout )
     {
-        /* Remove the sout from the playlist garbage collector */
-        /* FIXME: we don't want to depend on the playlist, sout
-         * should be attached to libvlc */
-        playlist_t * p_playlist = vlc_object_find( p_parent,
-            VLC_OBJECT_PLAYLIST, FIND_PARENT );
-        if( p_playlist )
+        p_sout = vlc_object_find( p_parent->p_libvlc, VLC_OBJECT_SOUT,
+                                                      FIND_CHILD );
+        if( p_sout )
         {
-            vlc_mutex_lock( &p_playlist->gc_lock );
-            p_sout = vlc_object_find( p_playlist, VLC_OBJECT_SOUT, FIND_CHILD );
-            if( p_sout )
+            if( p_sout->p_parent != VLC_OBJECT( p_sout->p_libvlc ) )
             {
-                if( p_sout->p_parent != VLC_OBJECT(p_playlist) )
-                {
-                    vlc_object_release( p_sout );
-                    p_sout = NULL;
-                }
-                else
-                {
-                    vlc_object_detach( p_sout );    /* Remove it from the GC */
-
-                    vlc_object_release( p_sout );
-                }
+                vlc_object_release( p_sout );
+                p_sout = NULL;
+            }
+            else
+            {
+                vlc_object_detach( p_sout );    /* Remove it from the GC */
+                vlc_object_release( p_sout );
             }
-            vlc_mutex_unlock( &p_playlist->gc_lock );
-
-            vlc_object_release( p_playlist );
         }
     }
 
@@ -1450,16 +1438,8 @@ static sout_instance_t *SoutFind( vlc_object_t *p_parent, input_item_t *p_item,
 
 static void SoutKeep( sout_instance_t *p_sout )
 {
-    /* FIXME: we don't want to depend on the playlist, sout
-     * should be attached to libvlc */
-    playlist_t * p_playlist = vlc_object_find( p_sout, VLC_OBJECT_PLAYLIST,
-                                               FIND_PARENT );
-    if( !p_playlist ) return;
-
     msg_Dbg( p_sout, "sout has been kept" );
-    vlc_object_attach( p_sout, p_playlist );
-
-    pl_Release( p_sout );
+    vlc_object_attach( p_sout, p_sout->p_libvlc );
 }
 
 /*****************************************************************************