[PATCH] android: camera_device: Fix camera blocked issue when stopping capture
Umang Jain
umang.jain at ideasonboard.com
Tue Mar 5 09:26:42 CET 2024
Hi Anle Pan, Hui Fang
On 04/03/24 3:05 pm, Anle Pan wrote:
> The issue occurs when stopping capture soon after starting capture.
Can you describe the issue/use case in more detail? It's really hard to
infer from one line.
>
> In this case, no frame get from the device, the
> related capture request has been pushed to the
> queue descriptors_, but the queuedRequests_ was
> still empty due to no requests will be queue to
> the device since the stream will be stopped soon,
I don't get it how is this possible? Since processCaptureRequest() will
push the request in the descriptors_ queue along with queuing the
request to the camera.
How will the call path be interleaved /before/ processCaptureRequest()
returns? Possibly we need more details on what you are trying to do,
before reviewing the code here. Is this related to CTS ?
> so there will be no camera->requestComplete called
> later, then the descriptors_ can not pop normally,
> this will cause the pending if we want to start capture next time.
>
> To fix the issue, ensure the descriptors_ is
> empty after the camera device is stopped.
>
> Signed-off-by: Anle Pan <anle.pan at nxp.com>
> ---
> src/android/camera_device.cpp | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 25cedd44..d452992d 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -433,8 +433,11 @@ void CameraDevice::flush()
> void CameraDevice::stop()
> {
> MutexLocker stateLock(stateMutex_);
> - if (state_ == State::Stopped)
> + if (state_ == State::Stopped) {
> + MutexLocker descriptorsLock(descriptorsMutex_);
> + descriptors_ = {};
> return;
> + }
>
> camera_->stop();
>
More information about the libcamera-devel
mailing list