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

Kieran Bingham kieran.bingham at ideasonboard.com
Fri May 21 11:17:05 CEST 2021


Hi Me and Others,

On 19/05/2021 17:04, Laurent Pinchart wrote:
> 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.

Yes, that could be ok.

If there are specific things that always need to be passed, this should
be added as an IPA interface sturcture like is done for the
IPAConfigInfo perhaps so it's clear and common.

I don't mind if this patch is just dropped from this series to get the
rest moving.

>From what I can tell, only 1/7 needs a small change or a check to
unblock the rest.

And even that could also be done on top perhaps too.

--
Kieran


> 
>> 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
--
Kieran


More information about the libcamera-devel mailing list