Commit 1738a320 authored by Gildas Bazin's avatar Gildas Bazin

* src/video_output/*: fixed race condition in spu initialization which affected DVD menus.

parent 8a8bb058
...@@ -278,7 +278,7 @@ VLC_EXPORT( void, __spu_DestroyRegion, ( vlc_object_t *, subpicture_region_t * ) ...@@ -278,7 +278,7 @@ VLC_EXPORT( void, __spu_DestroyRegion, ( vlc_object_t *, subpicture_region_t * )
void vout_InitSPU( vout_thread_t * ); void vout_InitSPU( vout_thread_t * );
void vout_DestroySPU( vout_thread_t * ); void vout_DestroySPU( vout_thread_t * );
void vout_AttachSPU( vout_thread_t *, vlc_bool_t ); void vout_AttachSPU( vout_thread_t *, vlc_object_t *, vlc_bool_t );
subpicture_t * vout_SortSubPictures ( vout_thread_t *, mtime_t ); subpicture_t * vout_SortSubPictures ( vout_thread_t *, mtime_t );
void vout_RenderSubPictures( vout_thread_t *, picture_t *, void vout_RenderSubPictures( vout_thread_t *, picture_t *,
picture_t *, subpicture_t * ); picture_t *, subpicture_t * );
......
...@@ -99,7 +99,7 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout, ...@@ -99,7 +99,7 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout,
if( p_playlist ) if( p_playlist )
{ {
vout_AttachSPU( p_vout, VLC_FALSE ); vout_AttachSPU( p_vout, p_this, VLC_FALSE );
vlc_object_detach( p_vout ); vlc_object_detach( p_vout );
vlc_object_attach( p_vout, p_playlist ); vlc_object_attach( p_vout, p_playlist );
...@@ -194,8 +194,8 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout, ...@@ -194,8 +194,8 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout,
{ {
/* This video output is cool! Hijack it. */ /* This video output is cool! Hijack it. */
vlc_object_detach( p_vout ); vlc_object_detach( p_vout );
vout_AttachSPU( p_vout, p_this, VLC_TRUE );
vlc_object_attach( p_vout, p_this ); vlc_object_attach( p_vout, p_this );
vout_AttachSPU( p_vout, VLC_TRUE );
vlc_object_release( p_vout ); vlc_object_release( p_vout );
} }
} }
...@@ -304,6 +304,10 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, ...@@ -304,6 +304,10 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent,
var_Create( p_vout, "mouse-moved", VLC_VAR_BOOL ); var_Create( p_vout, "mouse-moved", VLC_VAR_BOOL );
var_Create( p_vout, "mouse-clicked", VLC_VAR_INTEGER ); var_Create( p_vout, "mouse-clicked", VLC_VAR_INTEGER );
/* Initialize subpicture unit */
vout_InitSPU( p_vout );
vout_AttachSPU( p_vout, p_parent, VLC_TRUE );
/* Attach the new object now so we can use var inheritance below */ /* Attach the new object now so we can use var inheritance below */
vlc_object_attach( p_vout, p_parent ); vlc_object_attach( p_vout, p_parent );
...@@ -408,9 +412,6 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, ...@@ -408,9 +412,6 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent,
return NULL; return NULL;
} }
/* Initialize subpicture unit */
vout_InitSPU( p_vout );
/* Create a few object variables for interface interaction */ /* Create a few object variables for interface interaction */
var_Create( p_vout, "deinterlace", VLC_VAR_STRING | VLC_VAR_HASCHOICE ); var_Create( p_vout, "deinterlace", VLC_VAR_STRING | VLC_VAR_HASCHOICE );
text.psz_string = _("Deinterlace"); text.psz_string = _("Deinterlace");
......
...@@ -67,8 +67,6 @@ void vout_InitSPU( vout_thread_t *p_vout ) ...@@ -67,8 +67,6 @@ void vout_InitSPU( vout_thread_t *p_vout )
p_vout->i_crop_width = p_vout->i_crop_height = 0; p_vout->i_crop_width = p_vout->i_crop_height = 0;
p_vout->b_force_alpha = VLC_FALSE; p_vout->b_force_alpha = VLC_FALSE;
p_vout->b_force_crop = VLC_FALSE; p_vout->b_force_crop = VLC_FALSE;
vout_AttachSPU( p_vout, VLC_TRUE );
} }
/** /**
...@@ -108,7 +106,7 @@ void vout_DestroySPU( vout_thread_t *p_vout ) ...@@ -108,7 +106,7 @@ void vout_DestroySPU( vout_thread_t *p_vout )
vlc_object_destroy( p_vout->p_text ); vlc_object_destroy( p_vout->p_text );
} }
vout_AttachSPU( p_vout, VLC_FALSE ); vout_AttachSPU( p_vout, VLC_OBJECT(p_vout), VLC_FALSE );
} }
/** /**
...@@ -117,11 +115,12 @@ void vout_DestroySPU( vout_thread_t *p_vout ) ...@@ -117,11 +115,12 @@ void vout_DestroySPU( vout_thread_t *p_vout )
* \param p_vout the vout in which to destroy the subpicture unit * \param p_vout the vout in which to destroy the subpicture unit
* \param b_attach to select attach or detach * \param b_attach to select attach or detach
*/ */
void vout_AttachSPU( vout_thread_t *p_vout, vlc_bool_t b_attach ) void vout_AttachSPU( vout_thread_t *p_vout, vlc_object_t *p_this,
vlc_bool_t b_attach )
{ {
vlc_object_t *p_input; vlc_object_t *p_input;
p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT ); p_input = vlc_object_find( p_this, VLC_OBJECT_INPUT, FIND_PARENT );
if( !p_input ) return; if( !p_input ) return;
if( b_attach ) if( b_attach )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment