From c60783fdcb7523b696cd96d1714e27c81dfe1dc1 Mon Sep 17 00:00:00 2001 From: Theodoros Orfanidis Date: Wed, 1 Oct 2025 16:05:49 +0200 Subject: [PATCH] Fix texture size when recording via portal --- include/pipewire_video.h | 2 ++ src/capture/portal.c | 6 ++++-- src/pipewire_video.c | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/pipewire_video.h b/include/pipewire_video.h index d22e812..4d334f9 100644 --- a/include/pipewire_video.h +++ b/include/pipewire_video.h @@ -58,6 +58,8 @@ typedef struct { uint64_t modifiers; bool using_external_image; gsr_monitor_rotation rotation; + int texture_width; + int texture_height; } gsr_map_texture_output; typedef struct { diff --git a/src/capture/portal.c b/src/capture/portal.c index d8bed06..4dcdbfd 100644 --- a/src/capture/portal.c +++ b/src/capture/portal.c @@ -356,9 +356,11 @@ static int gsr_capture_portal_capture(gsr_capture *cap, gsr_capture_metadata *ca const bool is_scaled = self->params.output_resolution.x > 0 && self->params.output_resolution.y > 0; vec2i output_size = is_scaled ? self->params.output_resolution : self->capture_size; output_size = scale_keep_aspect_ratio(self->capture_size, output_size); - + const vec2i target_pos = { max_int(0, capture_metadata->width / 2 - output_size.x / 2), max_int(0, capture_metadata->height / 2 - output_size.y / 2) }; + const vec2i actual_texture_size = {self->pipewire_data.texture_width, self->pipewire_data.texture_height}; + //self->params.egl->glFlush(); //self->params.egl->glFinish(); @@ -370,7 +372,7 @@ static int gsr_capture_portal_capture(gsr_capture *cap, gsr_capture_metadata *ca gsr_color_conversion_draw(color_conversion, self->pipewire_data.using_external_image ? self->texture_map.external_texture_id : self->texture_map.texture_id, target_pos, output_size, - (vec2i){self->pipewire_data.region.x, self->pipewire_data.region.y}, self->capture_size, self->capture_size, + (vec2i){self->pipewire_data.region.x, self->pipewire_data.region.y}, (vec2i){self->pipewire_data.region.width, self->pipewire_data.region.height}, actual_texture_size, gsr_monitor_rotation_to_rotation(self->pipewire_data.rotation), GSR_SOURCE_COLOR_RGB, self->pipewire_data.using_external_image, fourcc_alpha); if(self->params.record_cursor && self->texture_map.cursor_texture_id > 0 && self->pipewire_data.cursor_region.width > 0) { diff --git a/src/pipewire_video.c b/src/pipewire_video.c index d4a4f7c..ff9b0e2 100644 --- a/src/pipewire_video.c +++ b/src/pipewire_video.c @@ -871,6 +871,9 @@ bool gsr_pipewire_video_map_texture(gsr_pipewire_video *self, gsr_texture_map te gsr_pipewire_video_update_cursor_texture(self, texture_map); + output->texture_width = self->format.info.raw.size.width; + output->texture_height = self->format.info.raw.size.height; + output->region.x = 0; output->region.y = 0;