X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=apps%2Fcamera-gstreamer.git;a=blobdiff_plain;f=app%2Futils.cpp;fp=app%2Futils.cpp;h=1cf71f2176b873e03bd354901feedf59daf53553;hp=f1c3eaef6a1ab5524a6f59df7696d5e2eafd3c22;hb=3c3a41eb2b33ba2253eb7439ff6290c414143416;hpb=88fde6fd98c0c4330cd91af267efa2f5492da180 diff --git a/app/utils.cpp b/app/utils.cpp index f1c3eae..1cf71f2 100644 --- a/app/utils.cpp +++ b/app/utils.cpp @@ -1,10 +1,16 @@ #include +#include +#include #include #include +#include #include #include #include #include +#include +#include +#include #include "utils.h" @@ -148,3 +154,44 @@ os_create_anonymous_file(off_t size) return fd; } + +const char* +get_camera_device(void) +{ + DIR *dir = opendir("/dev"); + if (!dir) { + perror("Couldn't open the '/dev' directory"); + return NULL; + } + + static char device[PATH_MAX]; + bool found = false; + while (struct dirent *dirent = readdir(dir)) { + if (strncmp(dirent->d_name, "video", strlen("video"))) + continue; + if (!isdigit(dirent->d_name[strlen("video")])) + continue; + + strcpy(device, "/dev/"); + strncat(device, dirent->d_name, sizeof(device) - 1); + + int fd = open(device, O_RDWR); + if (fd == -1) + continue; + struct v4l2_capability vid_cap; + if (ioctl(fd, VIDIOC_QUERYCAP, &vid_cap) < 0) { + close(fd); + continue; + } + close(fd); + + if ((vid_cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) || + (vid_cap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE)) { + found = true; + break; + } + } + + closedir(dir); + return found ? device : NULL; +}