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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Sep 15 02:44:58 CEST 2021


Hi Umang,

On Mon, Sep 13, 2021 at 11:55:35AM +0530, Umang Jain wrote:
> On 9/13/21 5:49 AM, Laurent Pinchart wrote:
> > 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.

I was expecting that objection :-)

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

How about adding the enum to Camera3RequestDescriptor ? It's a request
completion status after all, so it would make sense to centralize it
there.

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

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list