aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/main.cpp2
-rw-r--r--app/utils.cpp18
-rw-r--r--app/utils.h2
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
}