summaryrefslogtreecommitdiff
path: root/camera.c
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-02-25 10:56:04 -0500
committerpommicket <pommicket@gmail.com>2025-02-25 15:16:08 -0500
commit9b90ceee792cb51917af474ddcbc47edaacff16b (patch)
tree86c883958b05d42061a7d63c0cfbd4a607046626 /camera.c
parente8c5a90014982f423fbdcd3f8b3e7edacdb4b91c (diff)
fix audio issue
Diffstat (limited to 'camera.c')
-rw-r--r--camera.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/camera.c b/camera.c
index ed0510d..0a11ff2 100644
--- a/camera.c
+++ b/camera.c
@@ -321,8 +321,6 @@ static bool camera_stop_io(Camera *camera) {
camera->streaming = false;
// Just doing VIDIOC_STREAMOFF doesn't seem to be enough to prevent EBUSY.
// (Even if we dequeue all buffers afterwards)
- // Re-opening doesn't seem to be necessary for read-based access for me,
- // but idk if that's true on all cameras.
v4l2_close(camera->fd);
camera->fd = v4l2_open(camera->devnode, O_RDWR);
if (camera->fd < 0) {
@@ -751,6 +749,13 @@ void camera_close(Camera *camera) {
camera->userp_frames[i] = NULL;
}
if (camera->fd >= 0) {
+ if (camera->streaming) {
+ if (v4l2_ioctl(camera->fd, VIDIOC_STREAMOFF,
+ (enum v4l2_buf_type[1]) { V4L2_BUF_TYPE_VIDEO_CAPTURE }) != 0) {
+ perror("v4l2_ioctl VIDIOC_STREAMOFF");
+ }
+ camera->streaming = false;
+ }
v4l2_close(camera->fd);
camera->fd = -1;
}
@@ -794,6 +799,9 @@ uint64_t camera_framerates_supported(Camera *camera) {
bool camera_set_format(Camera *camera, PictureFormat picfmt, int desired_framerate, CameraAccessMethod access, bool force) {
assert(camera);
+ if (camera->fd < 0) {
+ return false;
+ }
if (!access) {
// by default, don't change access method
access = camera->access_method;