/* Initialize locks */
vlc_mutex_init(&vout->p->picture_lock);
vlc_mutex_init(&vout->p->vfilter_lock);
+ vlc_mutex_init(&vout->p->spu_lock);
/* Attach the new object now so we can use var inheritance below */
vlc_object_attach(vout, object);
vout_control_PushVoid(&vout->p->control, VOUT_CONTROL_CLEAN);
vlc_join(vout->p->thread, NULL);
+ vlc_mutex_lock(&vout->p->spu_lock);
spu_Destroy(vout->p->p_spu);
+ vout->p->p_spu = NULL;
+ vlc_mutex_unlock(&vout->p->spu_lock);
}
/* */
free(vout->p->splitter_name);
/* Destroy the locks */
+ vlc_mutex_destroy(&vout->p->spu_lock);
vlc_mutex_destroy(&vout->p->picture_lock);
vlc_mutex_destroy(&vout->p->vfilter_lock);
vout_control_Clean(&vout->p->control);
{
int channel = SPU_DEFAULT_CHANNEL;
- vout_control_cmd_t cmd;
- vout_control_cmd_Init(&cmd, VOUT_CONTROL_REGISTER_SUBPICTURE);
- cmd.u.integer_ptr = &channel;
-
- vout_control_Push(&vout->p->control, &cmd);
- vout_control_WaitEmpty(&vout->p->control);
+ vlc_mutex_lock(&vout->p->spu_lock);
+ if (vout->p->p_spu)
+ channel = spu_RegisterChannel(vout->p->p_spu);
+ vlc_mutex_unlock(&vout->p->spu_lock);
return channel;
}
spu_DisplaySubpicture(vout->p->p_spu, subpicture);
}
-static void ThreadRegisterSubpicture(vout_thread_t *vout, int *channel)
-{
- *channel = spu_RegisterChannel(vout->p->p_spu);
-}
-
static void ThreadFlushSubpicture(vout_thread_t *vout, int channel)
{
spu_ClearChannel(vout->p->p_spu, channel);
case VOUT_CONTROL_FLUSH_SUBPICTURE:
ThreadFlushSubpicture(vout, cmd.u.integer);
break;
- case VOUT_CONTROL_REGISTER_SUBPICTURE:
- ThreadRegisterSubpicture(vout, cmd.u.integer_ptr);
- break;
case VOUT_CONTROL_OSD_TITLE:
ThreadDisplayOsdTitle(vout, cmd.u.string);
break;