From 8fa65a4d5895a0cf3e6567dcf1115189580a7439 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 28 Jun 2008 22:52:16 +0300 Subject: [PATCH] Qt4: weak reference the video output... ...so we don't try to vout_Control() it after it's been destroyed. We cannot yield the video output for real either, as it would prevent it from being destroyed once it is not needed anymore. --- modules/gui/qt4/components/interface_widgets.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index 66cafb1739..d4e5e23a5e 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -60,7 +60,7 @@ VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i ) { /* Init */ - p_vout = NULL; + i_vout = 0; hide(); setMinimumSize( 16, 16 ); videoSize.rwidth() = -1; videoSize.rheight() = -1; @@ -97,6 +97,9 @@ void VideoWidget::paintEvent(QPaintEvent *ev) VideoWidget::~VideoWidget() { + vout_thread_t *p_vout = i_vout + ? (vout_thread_t *)vlc_object_get( i_vout ) : NULL; + if( p_vout ) { if( !p_intf->psz_switch_intf ) @@ -109,6 +112,7 @@ VideoWidget::~VideoWidget() if( vout_Control( p_vout, VOUT_REPARENT ) != VLC_SUCCESS ) vout_Control( p_vout, VOUT_CLOSE ); } + vlc_object_release( p_vout ); } } @@ -120,12 +124,12 @@ void *VideoWidget::request( vout_thread_t *p_nvout, int *pi_x, int *pi_y, { msg_Dbg( p_intf, "Video was requested %i, %i", *pi_x, *pi_y ); emit askVideoWidgetToShow( *pi_width, *pi_height ); - if( p_vout ) + if( i_vout ) { msg_Dbg( p_intf, "embedded video already in use" ); return NULL; } - p_vout = p_nvout; + i_vout = p_nvout->i_object_id; msg_Dbg( p_intf, "embedded video ready (handle %p)", winId() ); return ( void* )winId(); } @@ -145,7 +149,7 @@ void VideoWidget::SetSizing( unsigned int w, unsigned int h ) void VideoWidget::release( void *p_win ) { msg_Dbg( p_intf, "Video is not needed anymore" ); - p_vout = NULL; + i_vout = 0; videoSize.rwidth() = 0; videoSize.rheight() = 0; hide(); -- 2.39.2