mirror of
https://repo.dec05eba.com/gpu-screen-recorder
synced 2026-03-31 09:07:13 +09:00
Take screenshot with XGetImage on x11 to workaround nvidia driver (nvfbc) limitation that only allows one nvfbc session at a time
This commit is contained in:
@@ -5,9 +5,7 @@
|
||||
|
||||
typedef struct {
|
||||
gsr_egl *egl;
|
||||
const char *display_to_capture; /* if this is "screen", then the first monitor is captured. A copy is made of this */
|
||||
gsr_color_depth color_depth;
|
||||
gsr_color_range color_range;
|
||||
const char *display_to_capture; /* A copy is made of this */
|
||||
bool hdr;
|
||||
bool record_cursor;
|
||||
int fps;
|
||||
|
||||
@@ -11,8 +11,6 @@ typedef struct {
|
||||
vec2i pos;
|
||||
vec2i size;
|
||||
bool direct_capture;
|
||||
gsr_color_depth color_depth;
|
||||
gsr_color_range color_range;
|
||||
bool record_cursor;
|
||||
vec2i output_resolution;
|
||||
vec2i region_size;
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
|
||||
typedef struct {
|
||||
gsr_egl *egl;
|
||||
gsr_color_depth color_depth;
|
||||
gsr_color_range color_range;
|
||||
bool record_cursor;
|
||||
bool restore_portal_session;
|
||||
/* If this is set to NULL then this defaults to $XDG_CONFIG_HOME/gpu-screen-recorder/restore_token ($XDG_CONFIG_HOME defaults to $HOME/.config) */
|
||||
|
||||
@@ -8,9 +8,7 @@ typedef struct {
|
||||
gsr_egl *egl;
|
||||
unsigned long window;
|
||||
bool follow_focused; /* If this is set then |window| is ignored */
|
||||
gsr_color_range color_range;
|
||||
bool record_cursor;
|
||||
gsr_color_depth color_depth;
|
||||
vec2i output_resolution;
|
||||
} gsr_capture_xcomposite_params;
|
||||
|
||||
|
||||
18
include/capture/ximage.h
Normal file
18
include/capture/ximage.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef GSR_CAPTURE_XIMAGE_H
|
||||
#define GSR_CAPTURE_XIMAGE_H
|
||||
|
||||
#include "capture.h"
|
||||
#include "../vec2.h"
|
||||
|
||||
typedef struct {
|
||||
gsr_egl *egl;
|
||||
const char *display_to_capture; /* A copy is made of this */
|
||||
bool record_cursor;
|
||||
vec2i output_resolution;
|
||||
vec2i region_size;
|
||||
vec2i region_position;
|
||||
} gsr_capture_ximage_params;
|
||||
|
||||
gsr_capture* gsr_capture_ximage_create(const gsr_capture_ximage_params *params);
|
||||
|
||||
#endif /* GSR_CAPTURE_XIMAGE_H */
|
||||
@@ -235,6 +235,7 @@ struct gsr_egl {
|
||||
void (*glTexParameteriv)(unsigned int target, unsigned int pname, const int *params);
|
||||
void (*glGetTexLevelParameteriv)(unsigned int target, int level, unsigned int pname, int *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 (*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);
|
||||
|
||||
@@ -11,7 +11,8 @@ typedef enum {
|
||||
} gsr_image_format;
|
||||
|
||||
typedef enum {
|
||||
GSR_IMAGE_WRITER_SOURCE_OPENGL
|
||||
GSR_IMAGE_WRITER_SOURCE_OPENGL,
|
||||
GSR_IMAGE_WRITER_SOURCE_MEMORY
|
||||
} gsr_image_writer_source;
|
||||
|
||||
typedef struct {
|
||||
@@ -20,9 +21,12 @@ typedef struct {
|
||||
int width;
|
||||
int height;
|
||||
unsigned int texture;
|
||||
const void *memory; /* Reference */
|
||||
} gsr_image_writer;
|
||||
|
||||
bool gsr_image_writer_init(gsr_image_writer *self, gsr_image_writer_source source, gsr_egl *egl, int width, int height);
|
||||
bool gsr_image_writer_init_opengl(gsr_image_writer *self, gsr_egl *egl, int width, int height);
|
||||
/* |memory| is taken as a reference */
|
||||
bool gsr_image_writer_init_memory(gsr_image_writer *self, const void *memory, int width, int height);
|
||||
void gsr_image_writer_deinit(gsr_image_writer *self);
|
||||
|
||||
/* Quality is between 1 and 100 where 100 is the max quality. Quality doesn't apply to lossless formats */
|
||||
|
||||
@@ -69,4 +69,6 @@ bool vaapi_copy_egl_image_to_video_surface(gsr_egl *egl, EGLImage image, vec2i s
|
||||
|
||||
vec2i scale_keep_aspect_ratio(vec2i from, vec2i to);
|
||||
|
||||
unsigned int gl_create_texture(gsr_egl *egl, int width, int height, int internal_format, unsigned int format, int filter);
|
||||
|
||||
#endif /* GSR_UTILS_H */
|
||||
|
||||
Reference in New Issue
Block a user