[libcamera-devel] [PATCH v3 5/6] libcamera: pipeline: ipu3: Do not mark metadata complete early
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Mar 24 16:42:44 CET 2021
Hi Kieran,
Thank you for the patch.
On Wed, Mar 24, 2021 at 03:01:24PM +0000, Kieran Bingham wrote:
> When the imguOutputBufferReady() detects a cancelled frame, it is
> reporting that the metadata has been processed in order to be able to
> complete the cancelled request.
>
> This causes the FrameInfo to be completed and deleted early, but then an
> active buffer on the IMGU can complete and be unable to find the
> FrameInfo for it to complete correctly.
This is because IPU3Frames::tryComplete() will erroneously consider that
the frame is complete, right ? I'm a bit puzzled, that function checks
if there's any pending buffer, wouldn't that condition be true until all
the buffers are returned ? What am I missing ?
> Do not mark metadataProcessed early on the event that a single buffer is
> detected as cancelled. The stopping of the V4L2 devices will ensure
> that all queued buffers are returned to us and we can follow the normal
> and expected shutdown sequence.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> src/libcamera/pipeline/ipu3/ipu3.cpp | 3 ---
> 1 file changed, 3 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 34ee600340b1..a8edf906220b 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1232,9 +1232,6 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer)
> cropRegion_ = request->controls().get(controls::ScalerCrop);
> request->metadata().set(controls::ScalerCrop, cropRegion_);
>
> - if (buffer->metadata().status == FrameMetadata::FrameCancelled)
> - info->metadataProcessed = true;
> -
> if (frameInfos_.tryComplete(info))
> pipe_->completeRequest(request);
> }
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list