aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2023-04-15 20:39:02 +0200
committerdec05eba <dec05eba@protonmail.com>2023-04-15 20:39:02 +0200
commitc510bc5ae5099640869ae4a9a475339a5593e676 (patch)
tree65674357e79b277ccda35e3fd2c9ceee1ba2d83d
parentc9c615d4c711618e66e95220643d3f97f9fc7b87 (diff)
Remove extra swapBuffer in kms capture
-rw-r--r--TODO2
-rw-r--r--src/capture/kms_vaapi.c3
-rw-r--r--src/color_conversion.c5
-rw-r--r--src/shader.c5
4 files changed, 11 insertions, 4 deletions
diff --git a/TODO b/TODO
index bfcdba4..a8fe549 100644
--- a/TODO
+++ b/TODO
@@ -53,7 +53,7 @@ Monitor capture on steam deck is slightly below the game fps, but only when capt
Is this related to the dma buf rotation issue? different modifier being slow? does this always happen?
Make sure rgb to yuv color conversion is 100% correct.
-Fallback to vaapi copy in kms if opengl version fails. This can happen on steam deck for some reason (driver bug?).
+Fallback to vaapi copy in kms if opengl version fails. This can happen on steam deck for some reason (driver bug?). Also vaapi copy uses less gpu since it uses video codec unit to copy.
Test if vaapi copy version uses less memory than opengl version.
Intel is a bit weird with monitor capture and multiple monitors. If one of the monitors is rotated then all the kms will be rotated as well.
diff --git a/src/capture/kms_vaapi.c b/src/capture/kms_vaapi.c
index ce97400..7bc2a0b 100644
--- a/src/capture/kms_vaapi.c
+++ b/src/capture/kms_vaapi.c
@@ -419,9 +419,6 @@ static int gsr_capture_kms_vaapi_capture(gsr_capture *cap, AVFrame *frame) {
cap_kms->dmabuf_fd = 0;
}
- // TODO: Remove
- cap_kms->egl.eglSwapBuffers(cap_kms->egl.egl_display, cap_kms->egl.egl_surface);
-
return 0;
}
diff --git a/src/color_conversion.c b/src/color_conversion.c
index fbbe9e6..8b1590b 100644
--- a/src/color_conversion.c
+++ b/src/color_conversion.c
@@ -186,6 +186,9 @@ int gsr_color_conversion_init(gsr_color_conversion *self, const gsr_color_conver
}
void gsr_color_conversion_deinit(gsr_color_conversion *self) {
+ if(!self->egl)
+ return;
+
if(self->vertex_buffer_object_id) {
self->egl->glDeleteBuffers(1, &self->vertex_buffer_object_id);
self->vertex_buffer_object_id = 0;
@@ -204,6 +207,8 @@ void gsr_color_conversion_deinit(gsr_color_conversion *self) {
for(int i = 0; i < MAX_SHADERS; ++i) {
gsr_shader_deinit(&self->shaders[i]);
}
+
+ self->egl = NULL;
}
int gsr_color_conversion_update(gsr_color_conversion *self, int width, int height) {
diff --git a/src/shader.c b/src/shader.c
index e7b3bb2..f8d7eb2 100644
--- a/src/shader.c
+++ b/src/shader.c
@@ -116,10 +116,15 @@ int gsr_shader_init(gsr_shader *self, gsr_egl *egl, const char *vertex_shader, c
}
void gsr_shader_deinit(gsr_shader *self) {
+ if(!self->egl)
+ return;
+
if(self->program_id) {
self->egl->glDeleteProgram(self->program_id);
self->program_id = 0;
}
+
+ self->egl = NULL;
}
int gsr_shader_bind_attribute_location(gsr_shader *self, const char *attribute, int location) {