aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTheodoros Orfanidis <teoulas@gmail.com>2025-10-01 16:05:49 +0200
committerdec05eba <dec05eba@protonmail.com>2025-10-01 17:47:54 +0200
commitc60783fdcb7523b696cd96d1714e27c81dfe1dc1 (patch)
tree19f9dc3259928ea491908a549ef69391ee5241cc
parent313d3227d888a3ab24c0792dbdc51d877ccfd412 (diff)
Fix texture size when recording via portal
-rw-r--r--include/pipewire_video.h2
-rw-r--r--src/capture/portal.c6
-rw-r--r--src/pipewire_video.c3
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;