[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