[libcamera-devel] [PATCH v2 4/7] v4l2: v4l2_camera_proxy: Acquire only one buffer semaphore on VIDIOC_DQBUF
Niklas Söderlund
niklas.soderlund at ragnatech.se
Fri Jun 5 20:18:24 CEST 2020
Hi Paul,
Thanks for your patch.
On 2020-06-05 18:01:03 +0900, Paul Elder wrote:
> We use a semaphore to atomically keep track of how many buffers are
> available for dequeueing. The check for how to acquire the semaphore was
> incorrect, leading to a double acquire upon a successful nonblocking
> acquire. Fix this.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
>
> ---
> Changes in v2: restructured the if block so it's easier to read
> ---
> src/v4l2/v4l2_camera_proxy.cpp | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
> index ec6d265d..a0c6deea 100644
> --- a/src/v4l2/v4l2_camera_proxy.cpp
> +++ b/src/v4l2/v4l2_camera_proxy.cpp
> @@ -426,10 +426,10 @@ int V4L2CameraProxy::vidioc_dqbuf(struct v4l2_buffer *arg)
> !validateMemoryType(arg->memory))
> return -EINVAL;
>
> - if (nonBlocking_ && !vcam_->bufferSema_.tryAcquire())
> - return -EAGAIN;
> - else
> + if (!nonBlocking_)
> vcam_->bufferSema_.acquire();
> + else if (!vcam_->bufferSema_.tryAcquire())
> + return -EAGAIN;
>
> updateBuffers();
>
> --
> 2.20.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list