summaryrefslogtreecommitdiffstats
path: root/video/out/vo_dmabuf_wayland.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/vo_dmabuf_wayland.c')
-rw-r--r--video/out/vo_dmabuf_wayland.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/video/out/vo_dmabuf_wayland.c b/video/out/vo_dmabuf_wayland.c
index e04ff5d..35a4dac 100644
--- a/video/out/vo_dmabuf_wayland.c
+++ b/video/out/vo_dmabuf_wayland.c
@@ -137,10 +137,10 @@ static const struct wl_buffer_listener osd_buffer_listener = {
};
#if HAVE_VAAPI
-static void close_file_descriptors(VADRMPRIMESurfaceDescriptor desc)
+static void close_file_descriptors(const VADRMPRIMESurfaceDescriptor *desc)
{
- for (int i = 0; i < desc.num_objects; i++)
- close(desc.objects[i].fd);
+ for (int i = 0; i < desc->num_objects; i++)
+ close(desc->objects[i].fd);
}
#endif
@@ -175,7 +175,7 @@ static bool vaapi_drm_format(struct vo *vo, struct mp_image *src)
p->drm_modifier = desc.objects[0].drm_format_modifier;
format = true;
done:
- close_file_descriptors(desc);
+ close_file_descriptors(&desc);
#endif
return format;
}
@@ -216,7 +216,7 @@ static void vaapi_dmabuf_importer(struct buffer *buf, struct mp_image *src,
}
done:
- close_file_descriptors(desc);
+ close_file_descriptors(&desc);
#endif
}
@@ -493,7 +493,7 @@ static void set_viewport_source(struct vo *vo, struct mp_rect src)
if (p->force_window)
return;
- if (wl->video_viewport && !mp_rect_equals(&p->src, &src)) {
+ if (!mp_rect_equals(&p->src, &src)) {
wp_viewport_set_source(wl->video_viewport, src.x0 << 8,
src.y0 << 8, mp_rect_w(src) << 8,
mp_rect_h(src) << 8);
@@ -528,15 +528,18 @@ static void resize(struct vo *vo)
vo_get_src_dst_rects(vo, &src, &dst, &p->screen_osd_res);
int window_w = p->screen_osd_res.ml + p->screen_osd_res.mr + mp_rect_w(dst);
int window_h = p->screen_osd_res.mt + p->screen_osd_res.mb + mp_rect_h(dst);
- wp_viewport_set_destination(wl->viewport, window_w, window_h);
+ wp_viewport_set_destination(wl->viewport, lround(window_w / wl->scaling),
+ lround(window_h / wl->scaling));
//now we restore pan for video viewport calculation
vo->opts->pan_x = vo_opts->pan_x;
vo->opts->pan_y = vo_opts->pan_y;
vo_get_src_dst_rects(vo, &src, &dst, &p->screen_osd_res);
- wp_viewport_set_destination(wl->video_viewport, mp_rect_w(dst), mp_rect_h(dst));
+ wp_viewport_set_destination(wl->video_viewport, lround(mp_rect_w(dst) / wl->scaling),
+ lround(mp_rect_h(dst) / wl->scaling));
wl_subsurface_set_position(wl->video_subsurface, dst.x0, dst.y0);
- wp_viewport_set_destination(wl->osd_viewport, vo->dwidth, vo->dheight);
+ wp_viewport_set_destination(wl->osd_viewport, lround(vo->dwidth / wl->scaling),
+ lround(vo->dheight / wl->scaling));
wl_subsurface_set_position(wl->osd_subsurface, 0 - dst.x0, 0 - dst.y0);
set_viewport_source(vo, src);
}
@@ -692,10 +695,7 @@ done:
if (!vo_wayland_reconfig(vo))
return VO_ERROR;
- // mpv rotates clockwise but the wayland spec has counter-clockwise rotations
- // swap 1 and 3 to match mpv's direction
- int transform = (360 - img->params.rotate) % 360 / 90;
- wl_surface_set_buffer_transform(vo->wl->video_surface, transform);
+ wl_surface_set_buffer_transform(vo->wl->video_surface, img->params.rotate / 90);
// Immediately destroy all buffers if params change.
destroy_buffers(vo);
@@ -781,12 +781,6 @@ static int preinit(struct vo *vo)
goto err;
}
- if (!vo->wl->viewport) {
- MP_FATAL(vo->wl, "Compositor doesn't support the %s protocol!\n",
- wp_viewporter_interface.name);
- goto err;
- }
-
if (vo->wl->single_pixel_manager) {
#if HAVE_WAYLAND_PROTOCOLS_1_27
p->solid_buffer = wp_single_pixel_buffer_manager_v1_create_u32_rgba_buffer(