diff options
-rw-r--r-- | app/main.cpp | 2 | ||||
-rw-r--r-- | app/utils.cpp | 18 | ||||
-rw-r--r-- | app/utils.h | 2 |
3 files changed, 12 insertions, 10 deletions
diff --git a/app/main.cpp b/app/main.cpp index 67594bf..1acb70f 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -669,7 +669,7 @@ int main(int argc, char *argv[]) memset(pipeline_str, 0, sizeof(pipeline_str)); snprintf(pipeline_str, sizeof(pipeline_str), "v4l2src device=%s ! video/x-raw,width=%d,height=%d ! waylandsink", - get_camera_device(), WINDOW_WIDTH_SIZE, WINDOW_HEIGHT_SIZE); + get_first_camera_device(), WINDOW_WIDTH_SIZE, WINDOW_HEIGHT_SIZE); gst_init(&gargc, &gargv); setbuf(stdout, NULL); diff --git a/app/utils.cpp b/app/utils.cpp index 1cf71f2..45fd4d7 100644 --- a/app/utils.cpp +++ b/app/utils.cpp @@ -156,7 +156,7 @@ os_create_anonymous_file(off_t size) } const char* -get_camera_device(void) +get_first_camera_device(void) { DIR *dir = opendir("/dev"); if (!dir) { @@ -165,20 +165,22 @@ get_camera_device(void) } static char device[PATH_MAX]; + struct dirent *dirent; bool found = false; - while (struct dirent *dirent = readdir(dir)) { - if (strncmp(dirent->d_name, "video", strlen("video"))) + while ((dirent = readdir(dir)) != NULL) { + struct v4l2_capability vid_cap; + int fd; + + if (strcmp(dirent->d_name, "video")) continue; - if (!isdigit(dirent->d_name[strlen("video")])) + if (!isdigit(dirent->d_name[5])) continue; - strcpy(device, "/dev/"); - strncat(device, dirent->d_name, sizeof(device) - 1); + snprintf(device, sizeof(device), "/dev/%s", dirent->d_name); - int fd = open(device, O_RDWR); + 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; diff --git a/app/utils.h b/app/utils.h index 8d6f0fd..0e77531 100644 --- a/app/utils.h +++ b/app/utils.h @@ -9,7 +9,7 @@ int os_create_anonymous_file(off_t size); const char* -get_camera_device(void); +get_first_camera_device(void); #ifdef __cplusplus } |