diff options
| author | dec05eba <dec05eba@protonmail.com> | 2026-07-13 12:35:57 +0200 |
|---|---|---|
| committer | dec05eba <dec05eba@protonmail.com> | 2026-07-13 12:35:57 +0200 |
| commit | c09fb1b15dff6a06ac5e704022cd8e0193c7ca91 (patch) | |
| tree | 35c182d8b5ae83c25994691ba4d816c76d77501b /src | |
| parent | a453e85f72acf116e1bd2021864c6a715f98362c (diff) | |
Change -s to scale to fit rather than absolute scale
Diffstat (limited to 'src')
| -rw-r--r-- | src/capture/kms.c | 10 | ||||
| -rw-r--r-- | src/capture/nvfbc.c | 5 | ||||
| -rw-r--r-- | src/capture/xcomposite.c | 5 | ||||
| -rw-r--r-- | src/utils.c | 6 |
4 files changed, 19 insertions, 7 deletions
diff --git a/src/capture/kms.c b/src/capture/kms.c index 1544e2c..e061492 100644 --- a/src/capture/kms.c +++ b/src/capture/kms.c @@ -182,13 +182,15 @@ static int gsr_capture_kms_start(gsr_capture *cap, gsr_capture_metadata *capture else self->capture_size = rotate_capture_size_if_rotated(self, monitor.size, self->display_server_monitor_rotation); + vec2i capture_size = self->capture_size; + if(self->params.region_size.x > 0 && self->params.region_size.y > 0) + capture_size = self->params.region_size; + if(self->params.output_resolution.x > 0 && self->params.output_resolution.y > 0) { - self->params.output_resolution = scale_keep_aspect_ratio(self->capture_size, self->params.output_resolution); + self->params.output_resolution = scale_keep_aspect_ratio(capture_size, self->params.output_resolution); capture_metadata->video_size = self->params.output_resolution; - } else if(self->params.region_size.x > 0 && self->params.region_size.y > 0) { - capture_metadata->video_size = self->params.region_size; } else { - capture_metadata->video_size = self->capture_size; + capture_metadata->video_size = capture_size; } self->last_time_monitor_check = clock_get_monotonic_seconds(); diff --git a/src/capture/nvfbc.c b/src/capture/nvfbc.c index 144f88a..1504323 100644 --- a/src/capture/nvfbc.c +++ b/src/capture/nvfbc.c @@ -287,11 +287,12 @@ static int gsr_capture_nvfbc_start(gsr_capture *cap, gsr_capture_metadata *captu capture_metadata->video_size.x = self->tracking_width; capture_metadata->video_size.y = self->tracking_height; + if(self->params.region_size.x > 0 && self->params.region_size.y > 0) + capture_metadata->video_size = self->params.region_size; + if(self->params.output_resolution.x > 0 && self->params.output_resolution.y > 0) { self->params.output_resolution = scale_keep_aspect_ratio(capture_metadata->video_size, self->params.output_resolution); capture_metadata->video_size = self->params.output_resolution; - } else if(self->params.region_size.x > 0 && self->params.region_size.y > 0) { - capture_metadata->video_size = self->params.region_size; } return 0; diff --git a/src/capture/xcomposite.c b/src/capture/xcomposite.c index 56b2cd5..c1bef4f 100644 --- a/src/capture/xcomposite.c +++ b/src/capture/xcomposite.c @@ -98,8 +98,11 @@ static int gsr_capture_xcomposite_start(gsr_capture *cap, gsr_capture_metadata * if(self->params.output_resolution.x == 0 && self->params.output_resolution.y == 0) { capture_metadata->video_size = self->texture_size; - } else { + } else if(self->params.follow_focused) { + /* The video size has to stay the same even when the focused window changes, so it cant be based on the size of the captured window */ capture_metadata->video_size = self->params.output_resolution; + } else { + capture_metadata->video_size = scale_keep_aspect_ratio(self->texture_size, self->params.output_resolution); } self->window_resize_timer = clock_get_monotonic_seconds(); diff --git a/src/utils.c b/src/utils.c index abe8354..9010064 100644 --- a/src/utils.c +++ b/src/utils.c @@ -599,6 +599,12 @@ vec2i scale_keep_aspect_ratio(vec2i from, vec2i to) { from.x = from.y * width_height_ratio; } + /* An extreme aspect ratio can cause a dimension to truncate to 0, which the video encoder cant handle */ + if(from.x < 1) + from.x = 1; + if(from.y < 1) + from.y = 1; + return from; } |
