summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-02-24 21:39:41 -0500
committerpommicket <pommicket@gmail.com>2025-02-25 15:16:08 -0500
commitb514e0746ce313530d2e5e739563bb8daf1e78a4 (patch)
tree87db0c8d28024a5699a89fd6ae8916fbed36b831
parentb42ba09545b5c53d8ff4b4cc98f2d6c935f6ad18 (diff)
switch input when reopening
-rw-r--r--camera.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/camera.c b/camera.c
index 4d51c65..0f164ce 100644
--- a/camera.c
+++ b/camera.c
@@ -297,6 +297,7 @@ TODO: test me with a camera that supports userptr i/o
return true;*/
}
static bool camera_stop_io(Camera *camera) {
+ camera->any_frames = false;
if (v4l2_ioctl(camera->fd, VIDIOC_STREAMOFF,
(enum v4l2_buf_type[1]) { V4L2_BUF_TYPE_VIDEO_CAPTURE }) != 0) {
perror("v4l2_ioctl VIDIOC_STREAMOFF");
@@ -311,6 +312,11 @@ static bool camera_stop_io(Camera *camera) {
perror("v4l2_open");
return false;
}
+ if (v4l2_ioctl(camera->fd, VIDIOC_S_INPUT, &camera->input_idx) != 0) {
+ perror("v4l2_ioctl");
+ camera_close(camera);
+ return false;
+ }
return true;
}
int32_t camera_frame_width(Camera *camera) {
@@ -928,7 +934,7 @@ static void cameras_from_device_with_fd(const char *dev_path, const char *serial
}
void cameras_from_device(const char *dev_path, const char *serial, Camera ***cameras) {
- int fd = v4l2_open(dev_path, O_RDWR);
+ int fd = v4l2_open(dev_path, O_RDWR | O_CLOEXEC);
if (fd < 0) {
perror("v4l2_open");
return;