diff options
author | dec05eba <dec05eba@protonmail.com> | 2023-07-09 23:30:38 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2023-07-09 23:30:38 +0200 |
commit | f38ed36271ab417fbff005452e721a57c53641fe (patch) | |
tree | e72ca594bc8afd22c4ccfeb782482977daf135ab | |
parent | e158cb2a8b38176db6a187e2f17ddd8fef764c88 (diff) |
Test fix using correct gpu when multiple gpus are connected
-rwxr-xr-x | build.sh | 2 | ||||
-rw-r--r-- | project.conf | 3 | ||||
-rw-r--r-- | src/utils.c | 16 |
3 files changed, 18 insertions, 3 deletions
@@ -16,7 +16,7 @@ build_gsr_kms_server() { } build_gsr() { - dependencies="libavcodec libavformat libavutil x11 xcomposite xrandr xfixes libpulse libswresample libavfilter libva libcap" + dependencies="libavcodec libavformat libavutil x11 xcomposite xrandr xfixes libpulse libswresample libavfilter libva libcap libdrm" includes="$(pkg-config --cflags $dependencies)" libs="$(pkg-config --libs $dependencies) -ldl -pthread -lm" $CC -c src/capture/capture.c $opts $includes diff --git a/project.conf b/project.conf index ee1d00b..3871cad 100644 --- a/project.conf +++ b/project.conf @@ -19,4 +19,5 @@ libswresample = ">=3" libavfilter = ">=5" libva = ">=1" libcap = ">=2" -xfixes = ">=2"
\ No newline at end of file +xfixes = ">=2" +libdrm = ">=2"
\ No newline at end of file diff --git a/src/utils.c b/src/utils.c index bee57f3..0c57a4f 100644 --- a/src/utils.c +++ b/src/utils.c @@ -4,6 +4,8 @@ #include <string.h> #include <stdio.h> #include <unistd.h> +#include <xf86drmMode.h> +#include <fcntl.h> double clock_get_monotonic_seconds(void) { struct timespec ts; @@ -109,7 +111,19 @@ bool gl_get_gpu_info(Display *dpy, gsr_gpu_info *info) { bool gsr_get_valid_card_path(char *output) { for(int i = 0; i < 10; ++i) { sprintf(output, "/dev/dri/card%d", i); - if(access(output, F_OK) == 0) + int fd = open(output, O_RDONLY); + if(fd == -1) + continue; + + bool is_display_card = false; + drmModeResPtr resources = drmModeGetResources(fd); + if(resources) { + is_display_card = true; + drmModeFreeResources(resources); + } + close(fd); + + if(is_display_card) return true; } return false; |