[libcamera-devel] [PATCH v2 7/7] libcamera: pipeline: ipu3: Pass request metadata to IPA

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed May 19 18:04:49 CEST 2021


Hi Umang (and Kieran),

Thank you for the patch.

On Wed, May 19, 2021 at 03:49:54PM +0530, Umang Jain wrote:
> From: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> Pass the request metadata control list to the IPA when setting
> passing the statistics buffers, or after the raw buffer completion.
> 
> This allows us to pass in the timestamp and other data from the request
> which will be used by the IPA.

As commented on the previous version, I think it would be better to pass
the timestamp explicitly.

> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>  src/libcamera/pipeline/ipu3/ipu3.cpp | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 5b15ca90..38f66919 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1285,6 +1285,7 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
>  	ev.op = ipa::ipu3::EventFillParams;
>  	ev.frame = info->id;
>  	ev.bufferId = info->paramBuffer->cookie();
> +	ev.controls = request->metadata();
>  	ipa_->processEvent(ev);
>  }
>  
> @@ -1314,6 +1315,8 @@ void IPU3CameraData::statBufferReady(FrameBuffer *buffer)
>  	if (!info)
>  		return;
>  
> +	Request *request = info->request;
> +
>  	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
>  		info->metadataProcessed = true;
>  
> @@ -1321,7 +1324,6 @@ void IPU3CameraData::statBufferReady(FrameBuffer *buffer)
>  		* tryComplete() will delete info if it completes the IPU3Frame.
>  		* In that event, we must have obtained the Request before hand.
>  		*/
> -		Request *request = info->request;
>  
>  		if (frameInfos_.tryComplete(info))
>  			pipe_->completeRequest(request);
> @@ -1333,6 +1335,7 @@ void IPU3CameraData::statBufferReady(FrameBuffer *buffer)
>  	ev.op = ipa::ipu3::EventStatReady;
>  	ev.frame = info->id;
>  	ev.bufferId = info->statBuffer->cookie();
> +	ev.controls = request->metadata();
>  	ipa_->processEvent(ev);
>  }
>  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list