[libcamera-devel] [PATCH v2 3/9] android: post_processor: Plumb down the process() with context
Umang Jain
umang.jain at ideasonboard.com
Fri Sep 10 09:06:32 CEST 2021
The context required for post processing of a camera request is saved
via Camera3RequestDescriptor. The context needs to be plumbed to
PostProcessor::process() which should be passed a const pointer to
Camera3RequestDescriptor. In subsequent commits, we will prepare
the post-processor to run asynchrnoously hence, it will require the
context pointer to be emitted back to the upper layers, to identify for
which request the post-processing has been completed.
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
---
src/android/camera_device.cpp | 3 ++-
src/android/camera_stream.cpp | 6 ++++--
src/android/camera_stream.h | 5 ++++-
src/android/jpeg/post_processor_jpeg.cpp | 3 ++-
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, 22 insertions(+), 9 deletions(-)
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 0840c056..84549d04 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1150,7 +1150,8 @@ void CameraDevice::requestComplete(Request *request)
int ret = cameraStream->process(src, *buffer.buffer,
descriptor.settings_,
- resultMetadata.get());
+ resultMetadata.get(),
+ &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..d1c54797 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -101,7 +101,8 @@ int CameraStream::configure()
int CameraStream::process(const FrameBuffer *source,
buffer_handle_t camera3Dest,
const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata)
+ CameraMetadata *resultMetadata,
+ const Camera3RequestDescriptor *context)
{
if (!postProcessor_)
return 0;
@@ -118,7 +119,8 @@ int CameraStream::process(const FrameBuffer *source,
return -EINVAL;
}
- return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);
+ return postProcessor_->process(source, &dest, requestMetadata,
+ resultMetadata, context);
}
FrameBuffer *CameraStream::getBuffer()
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index 5c232cb6..d589f699 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:
@@ -121,7 +123,8 @@ public:
int process(const libcamera::FrameBuffer *source,
buffer_handle_t camera3Dest,
const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata);
+ CameraMetadata *resultMetadata,
+ const Camera3RequestDescriptor *context);
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..741eeb21 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -100,7 +100,8 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source,
int PostProcessorJpeg::process(const FrameBuffer *source,
CameraBuffer *destination,
const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata)
+ CameraMetadata *resultMetadata,
+ const Camera3RequestDescriptor *context)
{
if (!encoder_)
return 0;
diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
index c4b2e9ef..72c38fdb 100644
--- a/src/android/jpeg/post_processor_jpeg.h
+++ b/src/android/jpeg/post_processor_jpeg.h
@@ -25,7 +25,8 @@ public:
int process(const libcamera::FrameBuffer *source,
CameraBuffer *destination,
const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata) override;
+ CameraMetadata *resultMetadata,
+ const Camera3RequestDescriptor *context) override;
private:
void generateThumbnail(const libcamera::FrameBuffer *source,
diff --git a/src/android/post_processor.h b/src/android/post_processor.h
index 61dfb6d4..1213e7e6 100644
--- a/src/android/post_processor.h
+++ b/src/android/post_processor.h
@@ -14,6 +14,8 @@
class CameraMetadata;
+struct Camera3RequestDescriptor;
+
class PostProcessor
{
public:
@@ -24,7 +26,8 @@ public:
virtual int process(const libcamera::FrameBuffer *source,
CameraBuffer *destination,
const CameraMetadata &requestMetadata,
- CameraMetadata *resultMetadata) = 0;
+ CameraMetadata *resultMetadata,
+ const Camera3RequestDescriptor *context) = 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..13a78abe 100644
--- a/src/android/yuv/post_processor_yuv.cpp
+++ b/src/android/yuv/post_processor_yuv.cpp
@@ -52,7 +52,8 @@ 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]] CameraMetadata *metadata,
+ [[maybe_unused]] const Camera3RequestDescriptor *context)
{
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..38a30f91 100644
--- a/src/android/yuv/post_processor_yuv.h
+++ b/src/android/yuv/post_processor_yuv.h
@@ -23,7 +23,8 @@ public:
int process(const libcamera::FrameBuffer *source,
CameraBuffer *destination,
const CameraMetadata &requestMetadata,
- CameraMetadata *metadata) override;
+ CameraMetadata *metadata,
+ const Camera3RequestDescriptor *context) override;
private:
bool isValidBuffers(const libcamera::FrameBuffer *source,
--
2.31.1
More information about the libcamera-devel
mailing list