mirror of
https://repo.dec05eba.com/gpu-screen-recorder
synced 2026-04-06 03:26:38 +09:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5ba3f19fb | ||
|
|
53dc0b6dd0 | ||
|
|
c7cf99eac6 | ||
|
|
1d2790e47d | ||
|
|
8e821007da | ||
|
|
67ddede74a |
@@ -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
4
TODO
@@ -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).
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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" },
|
||||
|
||||
11
src/main.cpp
11
src/main.cpp
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user