void vout_InitSPU( vout_thread_t * );
void vout_DestroySPU( vout_thread_t * );
+void vout_AttachSPU( vout_thread_t *, vlc_bool_t );
subpicture_t * vout_SortSubPictures ( vout_thread_t *, mtime_t );
void vout_RenderSubPictures( vout_thread_t *, picture_t *,
picture_t *, subpicture_t * );
{
vlc_object_t *p_playlist;
- p_playlist = vlc_object_find( p_this,
- VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ p_playlist = vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
if( p_playlist )
{
+ vout_AttachSPU( p_vout, VLC_FALSE );
vlc_object_detach( p_vout );
vlc_object_attach( p_vout, p_playlist );
/* This video output is cool! Hijack it. */
vlc_object_detach( p_vout );
vlc_object_attach( p_vout, p_this );
+ vout_AttachSPU( p_vout, VLC_TRUE );
vlc_object_release( p_vout );
}
}
var_Set( p_vout, "intf-change", val );
return VLC_SUCCESS;
}
-
*/
void vout_InitSPU( vout_thread_t *p_vout )
{
- vlc_object_t *p_input;
int i_index;
for( i_index = 0; i_index < VOUT_MAX_SUBPICTURES; i_index++)
p_vout->b_force_alpha = VLC_FALSE;
p_vout->b_force_crop = VLC_FALSE;
- /* Create callback */
- p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT );
- if( p_input )
- {
- UpdateSPU( p_vout, VLC_OBJECT(p_input) );
- var_AddCallback( p_input, "highlight", CropCallback, p_vout );
- vlc_object_release( p_input );
- }
+ vout_AttachSPU( p_vout, VLC_TRUE );
}
/**
*/
void vout_DestroySPU( vout_thread_t *p_vout )
{
- vlc_object_t *p_input;
int i_index;
/* Destroy all remaining subpictures */
vlc_object_destroy( p_vout->p_blend );
}
- /* Delete callback */
+ vout_AttachSPU( p_vout, VLC_FALSE );
+}
+
+/**
+ * Attach/Detach the SPU from any input
+ *
+ * \param p_vout the vout in which to destroy the subpicture unit
+ * \param b_attach to select attach or detach
+ */
+void vout_AttachSPU( vout_thread_t *p_vout, vlc_bool_t b_attach )
+{
+ vlc_object_t *p_input;
+
p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT );
- if( p_input )
+ if( !p_input ) return;
+
+ if( b_attach )
{
+ UpdateSPU( p_vout, VLC_OBJECT(p_input) );
+ var_AddCallback( p_input, "highlight", CropCallback, p_vout );
+ vlc_object_release( p_input );
+ }
+ else
+ {
+ /* Delete callback */
var_DelCallback( p_input, "highlight", CropCallback, p_vout );
vlc_object_release( p_input );
}
+
}
/**