From 585382cf18f566d7555922e8966701ba297a5a4a Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 18 Jul 2023 07:06:12 +0200 Subject: More kms vaapi allow to work without xwayland --- TODO | 3 ++- src/capture/kms_vaapi.c | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/TODO b/TODO index b8f98e1..3a73ce3 100644 --- a/TODO +++ b/TODO @@ -83,4 +83,5 @@ Support screen rotation in amd/intel/nvidia wayland. Support wlroots dmabuf screen recording, because it doesn't require root access unlike kms grab. Capture cursor on amd/intel wayland without xwayland. When nvidia supports hardware cursor then capture the cursor. Right now the cursor is captured because it's a software cursor so it's composed on the dma buf. -CPU usage is pretty high on AMD/Intel/(Nvidia(wayland)), why? opening and closing fds, creating egl, cuda association, is slow when done every frame. \ No newline at end of file +CPU usage is pretty high on AMD/Intel/(Nvidia(wayland)), why? opening and closing fds, creating egl, cuda association, is slow when done every frame. Test if desktop portal screencast has better performance. +Cursor on amd/intel wayland only shows up when the cursor is above xwayland applications. \ No newline at end of file diff --git a/src/capture/kms_vaapi.c b/src/capture/kms_vaapi.c index 69b9d94..54b8816 100644 --- a/src/capture/kms_vaapi.c +++ b/src/capture/kms_vaapi.c @@ -576,7 +576,9 @@ static int gsr_capture_kms_vaapi_capture(gsr_capture *cap, AVFrame *frame) { } } - gsr_cursor_tick(&cap_kms->cursor); + if(cap_kms->dpy) { + gsr_cursor_tick(&cap_kms->cursor); + } vec2i capture_pos = cap_kms->capture_pos; vec2i capture_size = cap_kms->capture_size; @@ -591,10 +593,12 @@ static int gsr_capture_kms_vaapi_capture(gsr_capture *cap, AVFrame *frame) { capture_pos, capture_size, texture_rotation); - gsr_color_conversion_draw(&cap_kms->color_conversion, cap_kms->cursor.texture_id, - cursor_capture_pos, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y}, - (vec2i){0, 0}, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y}, - 0.0f); + if(cap_kms->dpy) { + gsr_color_conversion_draw(&cap_kms->color_conversion, cap_kms->cursor.texture_id, + cursor_capture_pos, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y}, + (vec2i){0, 0}, (vec2i){cap_kms->cursor.size.x, cap_kms->cursor.size.y}, + 0.0f); + } cap_kms->egl.eglSwapBuffers(cap_kms->egl.egl_display, cap_kms->egl.egl_surface); -- cgit v1.2.3