vo: hack to avoid threading issues with mouse input

VO backends which are or will run in their own thread have a problem
with vo_mouse_movement() calling vo_control(). Restrict this to VOs
which actually need this.
This commit is contained in:
wm4 2014-07-26 20:31:26 +02:00
parent 3f268cc4f2
commit 760548da28
5 changed files with 7 additions and 1 deletions

View File

@ -416,7 +416,8 @@ void vo_mouse_movement(struct vo *vo, int posx, int posy)
if (!vo->opts->enable_mouse_movements)
return;
float p[2] = {posx, posy};
vo_control(vo, VOCTRL_WINDOW_TO_OSD_COORDS, p);
if (vo->driver->caps & VO_CAP_EVIL_OSD)
vo_control(vo, VOCTRL_WINDOW_TO_OSD_COORDS, p);
mp_input_set_mouse_pos(vo->input_ctx, p[0], p[1]);
}

View File

@ -134,6 +134,8 @@ struct voctrl_screenshot_args {
// VO does handle mp_image_params.rotate in 90 degree steps
#define VO_CAP_ROTATE90 1
// Requires VOCTRL_WINDOW_TO_OSD_COORDS to map mouse coords. to OSD coords.
#define VO_CAP_EVIL_OSD 2
#define VO_MAX_QUEUE 5

View File

@ -928,6 +928,7 @@ static int control(struct vo *vo, uint32_t request, void *data)
const struct vo_driver video_out_wayland = {
.description = "Wayland SHM video output",
.name = "wayland",
.caps = VO_CAP_EVIL_OSD,
.priv_size = sizeof(struct priv),
.preinit = preinit,
.query_format = query_format,

View File

@ -647,6 +647,7 @@ static int control(struct vo *vo, uint32_t request, void *data)
const struct vo_driver video_out_x11 = {
.description = "X11 ( XImage/Shm )",
.name = "x11",
.caps = VO_CAP_EVIL_OSD,
.priv_size = sizeof(struct priv),
.options = (const struct m_option []){{0}},
.preinit = preinit,

View File

@ -866,6 +866,7 @@ static int control(struct vo *vo, uint32_t request, void *data)
const struct vo_driver video_out_xv = {
.description = "X11/Xv",
.name = "xv",
.caps = VO_CAP_EVIL_OSD,
.preinit = preinit,
.query_format = query_format,
.reconfig = reconfig,