void vout_control_cmd_Clean(vout_control_cmd_t *cmd)
{
switch (cmd->type) {
+ case VOUT_CONTROL_SUBPICTURE:
+ if (cmd->u.subpicture)
+ subpicture_Delete(cmd->u.subpicture);
+ break;
case VOUT_CONTROL_OSD_TITLE:
case VOUT_CONTROL_CHANGE_FILTERS:
case VOUT_CONTROL_CHANGE_SUB_FILTERS:
VOUT_CONTROL_START,
VOUT_CONTROL_STOP,
#endif
+ VOUT_CONTROL_SUBPICTURE, /* subpicture */
VOUT_CONTROL_OSD_TITLE, /* string */
VOUT_CONTROL_CHANGE_FILTERS, /* string */
VOUT_CONTROL_CHANGE_SUB_FILTERS, /* string */
unsigned height;
} window;
const vout_configuration_t *cfg;
+ subpicture_t *subpicture;
} u;
} vout_control_cmd_t;
void vout_PutSubpicture( vout_thread_t *vout, subpicture_t *subpic )
{
- spu_DisplaySubpicture(vout->p->p_spu, subpic);
+ vout_control_cmd_t cmd;
+ vout_control_cmd_Init(&cmd, VOUT_CONTROL_SUBPICTURE);
+ cmd.u.subpicture = subpic;
+
+ vout_control_Push(&vout->p->control, &cmd);
}
int vout_RegisterSubpictureChannel( vout_thread_t *vout )
{
vout_ManageWrapper(vout);
}
+static void ThreadDisplaySubpicture(vout_thread_t *vout,
+ subpicture_t *subpicture)
+{
+ spu_DisplaySubpicture(vout->p->p_spu, subpicture);
+}
static void ThreadDisplayOsdTitle(vout_thread_t *vout, const char *string)
{
if (!vout->p->title.show)
if (ThreadReinit(vout, cmd.u.cfg))
return NULL;
break;
+ case VOUT_CONTROL_SUBPICTURE:
+ ThreadDisplaySubpicture(vout, cmd.u.subpicture);
+ cmd.u.subpicture = NULL;
+ break;
case VOUT_CONTROL_OSD_TITLE:
ThreadDisplayOsdTitle(vout, cmd.u.string);
break;