Fix capture not working on intel + wayland

Ignore nouveau cards.
Fix lag on start of recording on amd/intel by only loading egl once,
on startup.
This commit is contained in:
dec05eba
2023-07-21 18:56:34 +02:00
parent 5a9673b1d7
commit a1d31a5cf0
13 changed files with 222 additions and 209 deletions

View File

@@ -8,6 +8,7 @@
typedef struct _XDisplay Display;
typedef struct {
gsr_egl *egl;
const char *display_to_capture; /* if this is "screen", then the entire x11 screen is captured (all displays). A copy is made of this */
gsr_gpu_info gpu_inf;
const char *card_path; /* reference */

View File

@@ -8,6 +8,7 @@
typedef struct _XDisplay Display;
typedef struct {
gsr_egl *egl;
const char *display_to_capture; /* if this is "screen", then the entire x11 screen is captured (all displays). A copy is made of this */
gsr_gpu_info gpu_inf;
const char *card_path; /* reference */

View File

@@ -2,12 +2,14 @@
#define GSR_CAPTURE_NVFBC_H
#include "capture.h"
#include "../egl.h"
#include "../vec2.h"
typedef struct _XDisplay Display;
typedef struct {
Display *dpy;
gsr_egl *egl;
const char *display_to_capture; /* if this is "screen", then the entire x11 screen is captured (all displays). A copy is made of this */
int fps;
vec2i pos;

View File

@@ -2,12 +2,14 @@
#define GSR_CAPTURE_XCOMPOSITE_CUDA_H
#include "capture.h"
#include "../egl.h"
#include "../vec2.h"
#include <X11/X.h>
typedef struct _XDisplay Display;
typedef struct {
gsr_egl *egl;
Window window;
bool follow_focused; /* If this is set then |window| is ignored */
vec2i region_size; /* This is currently only used with |follow_focused| */

View File

@@ -2,12 +2,14 @@
#define GSR_CAPTURE_XCOMPOSITE_VAAPI_H
#include "capture.h"
#include "../egl.h"
#include "../vec2.h"
#include <X11/X.h>
typedef struct _XDisplay Display;
typedef struct {
gsr_egl *egl;
Window window;
bool follow_focused; /* If this is set then |window| is ignored */
vec2i region_size; /* This is currently only used with |follow_focused| */

View File

@@ -2,6 +2,7 @@
#define GSR_UTILS_H
#include "vec2.h"
#include "../include/egl.h"
#include <stdbool.h>
#include <stdint.h>
#include <X11/extensions/Xrandr.h>
@@ -45,10 +46,12 @@ typedef void (*active_monitor_callback)(const gsr_monitor *monitor, void *userda
void for_each_active_monitor_output(void *connection, gsr_connection_type connection_type, active_monitor_callback callback, void *userdata);
bool get_monitor_by_name(void *connection, gsr_connection_type connection_type, const char *name, gsr_monitor *monitor);
bool gl_get_gpu_info(Display *dpy, gsr_gpu_info *info, bool wayland);
bool gl_get_gpu_info(gsr_egl *egl, gsr_gpu_info *info);
/* |output| should be at least 128 bytes in size */
bool gsr_get_valid_card_path(char *output);
/* |render_path| should be at least 128 bytes in size */
bool gsr_card_path_get_render_path(const char *card_path, char *render_path);
int even_number_ceil(int value);