From 985d96bf89b5d46a7bc7885578000a4f5ebc56d8 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 11 Feb 2024 15:33:55 +0100 Subject: Fix nvfbc capture crash on start --- include/capture/nvfbc.h | 1 - src/capture/nvfbc.c | 6 +++--- src/main.cpp | 8 ++++---- 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); -- cgit v1.2.3