From 974fafc1d1711f24da4adcae79e6bad8765078b9 Mon Sep 17 00:00:00 2001 From: WebFreak001 Date: Thu, 1 Jul 2021 00:06:59 +0000 Subject: [PATCH] focus now only triggerable once in parallel --- src/io_pipeline.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/io_pipeline.c b/src/io_pipeline.c index 2759d8b..2e0331a 100644 --- a/src/io_pipeline.c +++ b/src/io_pipeline.c @@ -364,6 +364,25 @@ void mp_io_pipeline_release_buffer(uint32_t buffer_index) mp_pipeline_invoke(pipeline, (MPPipelineCallback) release_buffer, &buffer_index, sizeof(uint32_t)); } +static pid_t focus_continuous_task = 0; +static pid_t start_focus_task = 0; +static void +start_focus(struct camera_info *info) +{ + // only run 1 manual focus at once + if (!mp_camera_check_task_complete(info->camera, start_focus_task) + || !mp_camera_check_task_complete(info->camera, focus_continuous_task)) + return; + + if (info->has_auto_focus_continuous) { + focus_continuous_task = mp_camera_control_set_bool_bg(info->camera, + V4L2_CID_FOCUS_AUTO, 1); + } else if (info->has_auto_focus_start) { + start_focus_task = mp_camera_control_set_bool_bg(info->camera, + V4L2_CID_AUTO_FOCUS_START, 1); + } +} + static void update_controls() { @@ -375,14 +394,7 @@ update_controls() struct camera_info *info = &cameras[camera->index]; if (want_focus) { - if (info->has_auto_focus_continuous) { - mp_camera_control_set_bool_bg(info->camera, V4L2_CID_FOCUS_AUTO, - 1); - } else if (info->has_auto_focus_start) { - mp_camera_control_set_bool_bg(info->camera, - V4L2_CID_AUTO_FOCUS_START, 1); - } - + start_focus(info); want_focus = false; }