diff options
Diffstat (limited to 'src/compositor-drm.c')
-rw-r--r-- | src/compositor-drm.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 3c15ec30..44413081 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -953,12 +953,15 @@ drm_output_prepare_cursor_view(struct weston_output *output_base, { struct drm_compositor *c = (struct drm_compositor *) output_base->compositor; + struct weston_buffer_viewport *viewport = &ev->surface->buffer_viewport; struct drm_output *output = (struct drm_output *) output_base; if (c->gbm == NULL) return NULL; if (output->base.transform != WL_OUTPUT_TRANSFORM_NORMAL) return NULL; + if (viewport->buffer.scale != output_base->current_scale) + return NULL; if (output->cursor_view) return NULL; if (ev->output_mask != (1u << output_base->id)) @@ -2576,7 +2579,7 @@ recorder_frame_notify(struct wl_listener *listener, void *data) return; } - vaapi_recorder_frame(output->recorder, fd, output->current->stride / 4); + vaapi_recorder_frame(output->recorder, fd, output->current->stride); } static void * @@ -2783,9 +2786,15 @@ drm_compositor_create(struct wl_display *display, wl_list_init(&ec->sprite_list); create_sprites(ec); + if (udev_input_init(&ec->input, + &ec->base, ec->udev, param->seat_id) < 0) { + weston_log("failed to create input devices\n"); + goto err_sprite; + } + if (create_outputs(ec, param->connector, drm_device) < 0) { weston_log("failed to create output for %s\n", path); - goto err_sprite; + goto err_udev_input; } /* A this point we have some idea of whether or not we have a working @@ -2795,12 +2804,6 @@ drm_compositor_create(struct wl_display *display, path = NULL; - if (udev_input_init(&ec->input, - &ec->base, ec->udev, param->seat_id) < 0) { - weston_log("failed to create input devices\n"); - goto err_sprite; - } - loop = wl_display_get_event_loop(ec->base.wl_display); ec->drm_source = wl_event_loop_add_fd(loop, ec->drm.fd, @@ -2843,6 +2846,7 @@ err_udev_monitor: udev_monitor_unref(ec->udev_monitor); err_drm_source: wl_event_source_remove(ec->drm_source); +err_udev_input: udev_input_destroy(&ec->input); err_sprite: ec->base.renderer->destroy(&ec->base); |