From 4b83963f56efe43365aeeb7aa0a8e5558db65db0 Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Fri, 13 Jun 2008 15:35:16 +0200 Subject: [PATCH] libvlc_media_player: Allow reparenting in libvlc_media_player_set_drawable(). --- src/control/media_player.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/control/media_player.c b/src/control/media_player.c index a42e655cd7..967c42c589 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -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 ); } /************************************************************************** -- 2.39.5