[libcamera-devel] [PATCH v2 10/12] android: camera_device: Generate ResultMetadata earlier

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Aug 4 13:10:45 CEST 2020


Hi Jacopo,

On 04/08/2020 12:08, Jacopo Mondi wrote:
> Hi Kieran
> 
> On Mon, Aug 03, 2020 at 05:18:14PM +0100, Kieran Bingham wrote:
>> Generate the ResultMetadata before performing JPEG compression so that
>> JPEG specific metadata can be added to the metadata when it has been
>> processed.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>> ---
>>  src/android/camera_device.cpp | 25 ++++++++++++++-----------
>>  1 file changed, 14 insertions(+), 11 deletions(-)
>>
>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
>> index ae52a5ca8b86..e23ab055d012 100644
>> --- a/src/android/camera_device.cpp
>> +++ b/src/android/camera_device.cpp
>> @@ -1138,6 +1138,8 @@ void CameraDevice::requestComplete(Request *request)
>>  	const std::map<Stream *, FrameBuffer *> &buffers = request->buffers();
>>  	camera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;
>>  	std::unique_ptr<CameraMetadata> resultMetadata;
>> +	Camera3RequestDescriptor *descriptor =
>> +		reinterpret_cast<Camera3RequestDescriptor *>(request->cookie());
>>
>>  	if (request->status() != Request::RequestComplete) {
>>  		LOG(HAL, Error) << "Request not successfully completed: "
>> @@ -1145,9 +1147,18 @@ void CameraDevice::requestComplete(Request *request)
>>  		status = CAMERA3_BUFFER_STATUS_ERROR;
>>  	}
>>
>> +	/*
>> +	 * \todo The timestamp used for the metadata is currently always taken
>> +	 * from the first buffer (which may be the first stream) in the Request.
>> +	 * It might be appropriate to return a 'correct' (as determined by
>> +	 * pipeline handlers) timestamp in the Request itself.
>> +	 */
>> +	FrameBuffer *buffer = buffers.begin()->second;
>> +	resultMetadata = getResultMetadata(descriptor->frameNumber,
>> +					   buffer->metadata().timestamp);
>> +
>>  	/* Prepare to call back the Android camera stack. */
>> -	Camera3RequestDescriptor *descriptor =
>> -		reinterpret_cast<Camera3RequestDescriptor *>(request->cookie());
>> +
> 
> One empty line is enough
> 
>>
>>  	camera3_capture_result_t captureResult = {};
>>  	captureResult.frame_number = descriptor->frameNumber;
>> @@ -1160,21 +1171,13 @@ void CameraDevice::requestComplete(Request *request)
>>  	captureResult.output_buffers =
>>  		const_cast<const camera3_stream_buffer_t *>(descriptor->buffers);
>>
>> -	/*
>> -	 * \todo The timestamp used for the metadata is currently always taken
>> -	 * from the first buffer (which may be the first stream) in the Request.
>> -	 * It might be appropriate to return a 'correct' (as determined by
>> -	 * pipeline handlers) timestamp in the Request itself.
>> -	 */
>> -	FrameBuffer *buffer = buffers.begin()->second;
>>
>>  	if (status == CAMERA3_BUFFER_STATUS_OK) {
>>  		notifyShutter(descriptor->frameNumber,
>>  			      buffer->metadata().timestamp);
>>
>>  		captureResult.partial_result = 1;
>> -		resultMetadata = getResultMetadata(descriptor->frameNumber,
>> -						   buffer->metadata().timestamp);
>> +
> 
> I would drop this one too
> 
> Overall I think this is fine so far, as we generate metadata
> statically, but going forward if we have to access the Controls
> returned by a completed Request, we shall make sure it completed
> successfully. Can we record that with a \todo entry ?
> 

I'm not sure I fully understand your comment here, do you mean the
libcamera request should be completed successfully before updating the
resultMetaData?

It will still only be assigned to the captureResult.result if the
 status == CAMERA3_BUFFER_STATUS_OK

check passes still...

You'll see how this gets used in 12/12 of course.


> That apart
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks,


> 
> Thanks
>   j
> 
>>  		captureResult.result = resultMetadata->get();
>>  	}
>>
>> --
>> 2.25.1
>>
>> _______________________________________________
>> libcamera-devel mailing list
>> libcamera-devel at lists.libcamera.org
>> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list