[libcamera-devel] [PATCH v3 06/10] android: camera_stream: Plumb process() with Camera3RequestDescriptor
Umang Jain
umang.jain at ideasonboard.com
Mon Sep 20 19:37:48 CEST 2021
Data (or broader context) required for post processing of a camera request
is saved via Camera3RequestDescriptor. Instead of passing individual
arguments to CameraStream::process(), pass the Camera3RequestDescriptor
pointer to it. All the arguments necessary to run the post-processor can
be accessed from the descriptor.
In subsequent commits, we will prepare the post-processor to run
asynchronously. Hence, it will require the Camera3RequestDescriptor
pointer to be emitted back in the post-processing completion handler
to finally complete the request (i.e. sending the capture results back
to the framework).
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/android/camera_device.cpp | 5 ++---
src/android/camera_stream.cpp | 5 ++---
src/android/camera_stream.h | 5 +++--
src/android/jpeg/post_processor_jpeg.cpp | 5 +++--
src/android/jpeg/post_processor_jpeg.h | 3 +--
src/android/post_processor.h | 5 +++--
src/android/yuv/post_processor_yuv.cpp | 3 +--
src/android/yuv/post_processor_yuv.h | 3 +--
8 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 1ae4ac73..fa462368 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1150,9 +1150,8 @@ void CameraDevice::requestComplete(Request *request)
continue;
}
- int ret = cameraStream->process(src, *buffer.buffer,
- descriptor->settings_,
- descriptor->resultMetadata_.get());
+ int ret = cameraStream->process(src, *buffer.buffer, descriptor);
+
/*
* Return the FrameBuffer to the CameraStream now that we're
* done processing it.
diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 0fed5382..d494f5d5 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -100,8 +100,7 @@ int CameraStream::configure()
int CameraStream::process(const FrameBuffer *source,
buffer_handle_t camera3Dest,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata)
+ Camera3RequestDescriptor *request)
{
if (!postProcessor_)
return 0;
@@ -118,7 +117,7 @@ int CameraStream::process(const FrameBuffer *source,
return -EINVAL;
}
- return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);
+ return postProcessor_->process(source, &dest, request);
}
FrameBuffer *CameraStream::getBuffer()
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index 5c232cb6..68789700 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -23,6 +23,8 @@ class CameraDevice;
class CameraMetadata;
class PostProcessor;
+struct Camera3RequestDescriptor;
+
class CameraStream
{
public:
@@ -120,8 +122,7 @@ public:
int configure();
int process(const libcamera::FrameBuffer *source,
buffer_handle_t camera3Dest,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata);
+ Camera3RequestDescriptor *request);
libcamera::FrameBuffer *getBuffer();
void putBuffer(libcamera::FrameBuffer *buffer);
diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index cb45f86b..31f68330 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -99,14 +99,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source,
int PostProcessorJpeg::process(const FrameBuffer *source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata)
+ Camera3RequestDescriptor *request)
{
if (!encoder_)
return 0;
ASSERT(destination->numPlanes() == 1);
+ const CameraMetadata &requestMetadata = request->settings_;
+ CameraMetadata *resultMetadata = request->resultMetadata_.get();
camera_metadata_ro_entry_t entry;
int ret;
diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
index c4b2e9ef..d49c8d2b 100644
--- a/src/android/jpeg/post_processor_jpeg.h
+++ b/src/android/jpeg/post_processor_jpeg.h
@@ -24,8 +24,7 @@ public:
const libcamera::StreamConfiguration &outcfg) override;
int process(const libcamera::FrameBuffer *source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata) override;
+ Camera3RequestDescriptor *request) override;
private:
void generateThumbnail(const libcamera::FrameBuffer *source,
diff --git a/src/android/post_processor.h b/src/android/post_processor.h
index 61dfb6d4..bdd6afe7 100644
--- a/src/android/post_processor.h
+++ b/src/android/post_processor.h
@@ -14,6 +14,8 @@
class CameraMetadata;
+struct Camera3RequestDescriptor;
+
class PostProcessor
{
public:
@@ -23,8 +25,7 @@ public:
const libcamera::StreamConfiguration &outCfg) = 0;
virtual int process(const libcamera::FrameBuffer *source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata) = 0;
+ Camera3RequestDescriptor *request) = 0;
};
#endif /* __ANDROID_POST_PROCESSOR_H__ */
diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp
index 0a874886..5e18caee 100644
--- a/src/android/yuv/post_processor_yuv.cpp
+++ b/src/android/yuv/post_processor_yuv.cpp
@@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,
int PostProcessorYuv::process(const FrameBuffer *source,
CameraBuffer *destination,
- [[maybe_unused]] const CameraMetadata &requestMetadata,
- [[maybe_unused]] CameraMetadata *metadata)
+ [[maybe_unused]] Camera3RequestDescriptor *request)
{
if (!isValidBuffers(source, *destination))
return -EINVAL;
diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h
index 44a04113..eddd1086 100644
--- a/src/android/yuv/post_processor_yuv.h
+++ b/src/android/yuv/post_processor_yuv.h
@@ -22,8 +22,7 @@ public:
const libcamera::StreamConfiguration &outcfg) override;
int process(const libcamera::FrameBuffer *source,
CameraBuffer *destination,
- const CameraMetadata &requestMetadata,
- CameraMetadata *metadata) override;
+ Camera3RequestDescriptor *context) override;
private:
bool isValidBuffers(const libcamera::FrameBuffer *source,
--
2.31.1
More information about the libcamera-devel
mailing list