aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2024-02-11 15:33:55 +0100
committerdec05eba <dec05eba@protonmail.com>2024-02-11 15:33:55 +0100
commit985d96bf89b5d46a7bc7885578000a4f5ebc56d8 (patch)
tree962e0e163b5d36dc453672ba604fa1c39be6164d
parent164145db29e76725a6b0a6ef1d0b0e5bc88fdd70 (diff)
Fix nvfbc capture crash on start
-rw-r--r--include/capture/nvfbc.h1
-rw-r--r--src/capture/nvfbc.c6
-rw-r--r--src/main.cpp8
3 files changed, 7 insertions, 8 deletions
diff --git a/include/capture/nvfbc.h b/include/capture/nvfbc.h
index 5678473..a5df81c 100644
--- a/include/capture/nvfbc.h
+++ b/include/capture/nvfbc.h
@@ -9,7 +9,6 @@ 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;
diff --git a/src/capture/nvfbc.c b/src/capture/nvfbc.c
index b0c4941..e6ee1a9 100644
--- a/src/capture/nvfbc.c
+++ b/src/capture/nvfbc.c
@@ -189,7 +189,7 @@ static bool ffmpeg_create_cuda_contexts(gsr_capture_nvfbc *cap_nvfbc, AVCodecCon
static int gsr_capture_nvfbc_start(gsr_capture *cap, AVCodecContext *video_codec_context) {
gsr_capture_nvfbc *cap_nvfbc = cap->priv;
- if(!gsr_cuda_load(&cap_nvfbc->cuda, cap_nvfbc->params.egl->x11.dpy, cap_nvfbc->params.overclock))
+ if(!gsr_cuda_load(&cap_nvfbc->cuda, cap_nvfbc->params.dpy, cap_nvfbc->params.overclock))
return -1;
if(!gsr_capture_nvfbc_load_library(cap)) {
@@ -269,8 +269,8 @@ static int gsr_capture_nvfbc_start(gsr_capture *cap, AVCodecContext *video_codec
goto error_cleanup;
}
- uint32_t tracking_width = XWidthOfScreen(DefaultScreenOfDisplay(cap_nvfbc->params.egl->x11.dpy));
- uint32_t tracking_height = XHeightOfScreen(DefaultScreenOfDisplay(cap_nvfbc->params.egl->x11.dpy));
+ uint32_t tracking_width = XWidthOfScreen(DefaultScreenOfDisplay(cap_nvfbc->params.dpy));
+ uint32_t tracking_height = XHeightOfScreen(DefaultScreenOfDisplay(cap_nvfbc->params.dpy));
tracking_type = strcmp(cap_nvfbc->params.display_to_capture, "screen") == 0 ? NVFBC_TRACKING_SCREEN : NVFBC_TRACKING_OUTPUT;
if(tracking_type == NVFBC_TRACKING_OUTPUT) {
if(!status_params.bXRandRAvailable) {
diff --git a/src/main.cpp b/src/main.cpp
index f4c15b4..9dff159 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1380,7 +1380,8 @@ static void list_supported_video_codecs() {
_exit(2);
gsr_egl_unload(&egl);
- XCloseDisplay(dpy);
+ if(dpy)
+ XCloseDisplay(dpy);
char card_path[128];
card_path[0] = '\0';
@@ -1494,16 +1495,15 @@ static gsr_capture* create_capture_impl(const char *window_str, const char *scre
capture_target = "screen";
}
- gsr_egl_unload(&egl);
-
gsr_capture_nvfbc_params nvfbc_params;
- nvfbc_params.egl->x11.dpy = egl.x11.dpy;
+ nvfbc_params.dpy = egl.x11.dpy;
nvfbc_params.display_to_capture = capture_target;
nvfbc_params.fps = fps;
nvfbc_params.pos = { 0, 0 };
nvfbc_params.size = { 0, 0 };
nvfbc_params.direct_capture = direct_capture;
nvfbc_params.overclock = overclock;
+ gsr_egl_unload(&egl);
capture = gsr_capture_nvfbc_create(&nvfbc_params);
if(!capture)
_exit(1);