aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO3
-rw-r--r--src/capture/kms_vaapi.c14
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);