Compare commits

...

6 Commits

Author SHA1 Message Date
dec05eba
d5ba3f19fb 5.11.2 2025-12-26 22:33:08 +01:00
dec05eba
53dc0b6dd0 Regression fix: hevc_10bit broken 2025-12-26 22:32:51 +01:00
dec05eba
c7cf99eac6 Correct license identifier 2025-12-26 16:16:47 +01:00
dec05eba
1d2790e47d Clearify license (gpl3.0-only) 2025-12-26 16:08:49 +01:00
dec05eba
8e821007da 5.11.1 2025-12-25 03:43:23 +01:00
dec05eba
67ddede74a Correctly combine damage tracking when using multiple sources 2025-12-25 03:43:02 +01:00
10 changed files with 25 additions and 13 deletions

View File

@@ -191,6 +191,9 @@ For you as a user this only means that if you installed GPU Screen Recorder as a
This should work fine on AMD/Intel X11 or Wayland. On Nvidia X11 G-SYNC only works with the -w screen-direct option, but because of bugs in the Nvidia driver this option is not always recommended.
For example it can cause your computer to freeze when recording certain games.
# License
This software is licensed under GPL-3.0-only, see the LICENSE file for more information.
# Reporting bugs, contributing patches, questions or donation
See [https://git.dec05eba.com/?p=about](https://git.dec05eba.com/?p=about).

4
TODO
View File

@@ -384,4 +384,6 @@ Set v4l2 camera fps to video output fps (if lower than the camera fps) and the s
Support camera controls, such as white balance. Otherwise tell user to use cameractrl software.
Camera capture doesn't work perfectly. The image gets glitched, need to properly wait for image to be done.
Camera capture doesn't work perfectly. The image gets glitched, need to properly wait for image to be done.
Use one pipewire connection (pipewire video) instead of multiple ones when recording with portal multiple times (multiple sources).

View File

@@ -111,10 +111,14 @@ These are the available options for capture sources:
- The Y position in pixels. If the number ends with % and is a number between 0 and 100 then it's a position relative to the video size
.IP \(bu 3
.B width
- The width in pixels. If the number ends with % and is a number between 0 and 100 then it's a size relative to the video size
- The width in pixels. If the number ends with % and is a number between 0 and 100 then it's a size relative to the video size.
A value of 0 means to not scale the capture source and instead use the original width.
.IP \(bu 3
.B height
- The height in pixels. If the number ends with % and is a number between 0 and 100 then it's a size relative to the video size
A value of 0 means to not scale the capture source and instead use the original height.
.IP \(bu 3
.B halign
- The horizontal alignment, should be either

View File

@@ -257,6 +257,7 @@ struct gsr_egl {
void (*glTexParameterfv)(unsigned int target, unsigned int pname, const float *params);
void (*glTexImage2D)(unsigned int target, int level, int internalFormat, int width, int height, int border, unsigned int format, unsigned int type, const void *pixels);
void (*glTexSubImage2D)(unsigned int target, int level, int xoffset, int yoffset, int width, int height, unsigned format, unsigned type, const void *pixels);
void (*glTexStorage2D)(unsigned int target, int levels, unsigned int internalformat, int width, int height);
void (*glGetTexImage)(unsigned int target, int level, unsigned int format, unsigned int type, void *pixels);
void (*glGenFramebuffers)(int n, unsigned int *framebuffers);
void (*glBindFramebuffer)(unsigned int target, unsigned int framebuffer);

View File

@@ -1,4 +1,4 @@
project('gpu-screen-recorder', ['c', 'cpp'], version : '5.11.0', default_options : ['warning_level=2'])
project('gpu-screen-recorder', ['c', 'cpp'], version : '5.11.2', default_options : ['warning_level=2'])
add_project_arguments('-Wshadow', language : ['c', 'cpp'])
if get_option('buildtype') == 'debug'

View File

@@ -1,7 +1,7 @@
[package]
name = "gpu-screen-recorder"
type = "executable"
version = "5.11.0"
version = "5.11.2"
platforms = ["posix"]
[config]
@@ -33,4 +33,4 @@ wayland-client = ">=1"
dbus-1 = ">=1"
libpipewire-0.3 = ">=1"
libspa-0.2 = ">=0"
vulkan = ">=1"
vulkan = ">=1"

View File

@@ -201,8 +201,6 @@ static void usage_header(void) {
fflush(stdout);
}
// TODO: Add --list-v4l2-devices option
static void usage_full(void) {
const bool inside_flatpak = getenv("FLATPAK_ID") != NULL;
usage_header();

View File

@@ -282,6 +282,7 @@ static bool gsr_egl_load_gl(gsr_egl *self, void *library) {
{ (void**)&self->glTexParameterfv, "glTexParameterfv" },
{ (void**)&self->glTexImage2D, "glTexImage2D" },
{ (void**)&self->glTexSubImage2D, "glTexSubImage2D" },
{ (void**)&self->glTexStorage2D, "glTexStorage2D" },
{ (void**)&self->glGetTexImage, "glGetTexImage" },
{ (void**)&self->glGenFramebuffers, "glGenFramebuffers" },
{ (void**)&self->glBindFramebuffer, "glBindFramebuffer" },

View File

@@ -4270,6 +4270,9 @@ int main(int argc, char **argv) {
should_stop_error = false;
bool damaged = false;
if(use_damage_tracking)
damaged = gsr_damage_is_damaged(&damage);
for(VideoSource &video_source : video_sources) {
gsr_capture_tick(video_source.capture);
@@ -4291,11 +4294,9 @@ int main(int argc, char **argv) {
video_source.capture_source->window_id = damage_target_window;
}
if(use_damage_tracking)
damaged = gsr_damage_is_damaged(&damage);
else if(video_source.capture->is_damaged)
damaged = video_source.capture->is_damaged(video_source.capture);
else
if(video_source.capture->is_damaged)
damaged |= video_source.capture->is_damaged(video_source.capture);
else if(!use_damage_tracking)
damaged = true;
}

View File

@@ -631,7 +631,9 @@ unsigned int gl_create_texture(gsr_egl *egl, int width, int height, int internal
unsigned int texture_id = 0;
egl->glGenTextures(1, &texture_id);
egl->glBindTexture(GL_TEXTURE_2D, texture_id);
egl->glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, format, GL_UNSIGNED_BYTE, NULL);
//egl->glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, format, GL_UNSIGNED_BYTE, NULL);
// Needed for hevc_10bit for nvenc (cuGraphicsGLRegisterImage)
egl->glTexStorage2D(GL_TEXTURE_2D, 1, internal_format, width, height);
egl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
egl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);