[libcamera-devel] [PATCH v2 5/9] android: camera_stream: Query post-processing status

Umang Jain umang.jain at ideasonboard.com
Mon Sep 13 08:25:35 CEST 2021


Hi Laurent,

On 9/13/21 5:49 AM, Laurent Pinchart wrote:
> Hi Umang,
>
> Thank you for the patch.
>
> On Fri, Sep 10, 2021 at 12:36:34PM +0530, Umang Jain wrote:
>> CameraStream takes care of any post-processing required via the
>> CameraStream::process(). Since the post-processor will be moved
>> to a separate thread (in subsequent commits), the caller of
>> PostProcessor::process() will notify the associated CameraStream
>> instance about the post-processing completion via processComplete
>> signal. The CameraStream class should handle this event to query
>> the status and take next steps of reporting it back to upper layers
>> (i.e. CameraDevice).
>>
>> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
>> ---
>>   src/android/camera_stream.cpp | 13 +++++++++++++
>>   src/android/camera_stream.h   | 13 ++++++++++++-
>>   2 files changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
>> index d1c54797..996779c4 100644
>> --- a/src/android/camera_stream.cpp
>> +++ b/src/android/camera_stream.cpp
>> @@ -81,6 +81,9 @@ int CameraStream::configure()
>>   		int ret = postProcessor_->configure(configuration(), output);
>>   		if (ret)
>>   			return ret;
>> +
>> +		postProcessor_->processComplete.connect(
>> +			this, &CameraStream::postProcessingComplete);
>>   	}
>>   
>>   	if (allocator_) {
>> @@ -123,6 +126,16 @@ int CameraStream::process(const FrameBuffer *source,
>>   				       resultMetadata, context);
>>   }
>>   
>> +void CameraStream::postProcessingComplete(PostProcessor::Status status,
>> +					  const Camera3RequestDescriptor *context)
>> +{
>> +	ProcessStatus processStatus;
>> +	if (status == PostProcessor::Status::Succeeded)
>> +		processStatus = ProcessStatus::Succeeded;
>> +	else
>> +		processStatus = ProcessStatus::Failed;
>> +}
> I'd squash this patch with 6/9, it doesn't do much on its own, and fails
> to compile due to the unused processStatus variable.
>
>> +
>>   FrameBuffer *CameraStream::getBuffer()
>>   {
>>   	if (!allocator_)
>> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
>> index d589f699..be076995 100644
>> --- a/src/android/camera_stream.h
>> +++ b/src/android/camera_stream.h
>> @@ -13,15 +13,18 @@
>>   
>>   #include <hardware/camera3.h>
>>   
>> +#include <libcamera/base/signal.h>
> I don't think you need the signal header here.
>
>> +
>>   #include <libcamera/camera.h>
>>   #include <libcamera/framebuffer.h>
>>   #include <libcamera/framebuffer_allocator.h>
>>   #include <libcamera/geometry.h>
>>   #include <libcamera/pixel_format.h>
>>   
>> +#include "post_processor.h"
>> +
>>   class CameraDevice;
>>   class CameraMetadata;
>> -class PostProcessor;
>>   
>>   struct Camera3RequestDescriptor;
>>   
>> @@ -128,7 +131,15 @@ public:
>>   	libcamera::FrameBuffer *getBuffer();
>>   	void putBuffer(libcamera::FrameBuffer *buffer);
>>   
>> +	enum ProcessStatus {
>> +		Succeeded,
>> +		Failed,
>> +	};
> Do we need this enum, could we use PostProcessor::Status everywhere ?


Yes, that would be my preference as well. But I think is if we do, we 
will have PostProcessor:: in CameraDevice, which currently doesn't 
interact with PostProcessor layer atleast directly. And I would like to 
keep it that way.


Maybe keep the status enum in CameraStream class and use it both in 
PostProcessor and CameraDevice. That way we achieve Status:: stuff 
everywhere probably.


>
>> +
>>   private:
>> +	void postProcessingComplete(PostProcessor::Status status,
>> +				    const Camera3RequestDescriptor *context);
>> +
>>   	CameraDevice *const cameraDevice_;
>>   	const libcamera::CameraConfiguration *config_;
>>   	const Type type_;


More information about the libcamera-devel mailing list