aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sh2
-rw-r--r--project.conf3
-rw-r--r--src/utils.c16
3 files changed, 18 insertions, 3 deletions
diff --git a/build.sh b/build.sh
index caa3176..3cf6b5f 100755
--- a/build.sh
+++ b/build.sh
@@ -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;