]> git.sesse.net Git - vlc/commitdiff
libvlc_media_player: Allow reparenting in libvlc_media_player_set_drawable().
authorPierre d'Herbemont <pdherbemont@videolan.org>
Fri, 13 Jun 2008 13:35:16 +0000 (15:35 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Fri, 13 Jun 2008 13:35:16 +0000 (15:35 +0200)
src/control/media_player.c

index a42e655cd78193cef72956052540a4cfeba6b602..967c42c58927ffeaa7733084354c8ec6e17e6b6b 100644 (file)
@@ -668,11 +668,30 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
  * Set Drawable
  **************************************************************************/
 void libvlc_media_player_set_drawable( libvlc_media_player_t *p_mi,
-                                         libvlc_drawable_t drawable,
-                                         libvlc_exception_t *p_e )
+                                       libvlc_drawable_t drawable,
+                                       libvlc_exception_t *p_e )
 {
-    VLC_UNUSED(p_e);
+    input_thread_t *p_input_thread;
+    vout_thread_t *p_vout = NULL;
+
     p_mi->drawable = drawable;
+
+    /* Allow on the fly drawable changing. This is tricky has this may
+     * not be supported by every vout. We though can't disable it
+     * because of some creepy drawable type that are not flexible enough
+     * (Win32 HWND for instance) */
+    p_input_thread = libvlc_get_input_thread ( p_mi, p_e);
+    if( !p_input_thread ) return;
+
+    p_vout = vlc_object_find( p_input_thread, VLC_OBJECT_VOUT, FIND_CHILD );
+    if( !p_vout )
+        libvlc_exception_raise( p_exception, "No active video output" );
+    else
+    {
+        vout_Control( p_vout , VOUT_REPARENT, drawable);
+        vlc_object_release( p_vout );
+    }
+    vlc_object_release( p_input_thread );
 }
 
 /**************************************************************************