[libcamera-devel] [PATCH v2 4/9] android: post_processor: Notify post processing completion status
Umang Jain
umang.jain at ideasonboard.com
Fri Sep 10 09:06:33 CEST 2021
We should be able to know if post-processing has been completed
successfully or encountered some errors. This commit introduces a
Signal<> which when connected, will notify that the post-processing
has been completed. The status of PostProcessor::process() will be
passed as a PostProcessor::Status argument. The signal will be required
when the post-processor is meant to run asynchronously (in subsequent
commits).
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
---
src/android/jpeg/post_processor_jpeg.cpp | 7 ++++++-
src/android/post_processor.h | 8 ++++++++
src/android/yuv/post_processor_yuv.cpp | 4 ++++
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index 741eeb21..1df3dfb1 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -103,8 +103,10 @@ int PostProcessorJpeg::process(const FrameBuffer *source,
CameraMetadata *resultMetadata,
const Camera3RequestDescriptor *context)
{
- if (!encoder_)
+ if (!encoder_) {
+ processComplete.emit(PostProcessor::Status::Failed, context);
return 0;
+ }
ASSERT(destination->numPlanes() == 1);
@@ -197,6 +199,7 @@ int PostProcessorJpeg::process(const FrameBuffer *source,
exif.data(), quality);
if (jpeg_size < 0) {
LOG(JPEG, Error) << "Failed to encode stream image";
+ processComplete.emit(PostProcessor::Status::Failed, context);
return jpeg_size;
}
@@ -211,5 +214,7 @@ int PostProcessorJpeg::process(const FrameBuffer *source,
/* Update the JPEG result Metadata. */
resultMetadata->addEntry(ANDROID_JPEG_SIZE, jpeg_size);
+ processComplete.emit(PostProcessor::Status::Succeeded, context);
+
return 0;
}
diff --git a/src/android/post_processor.h b/src/android/post_processor.h
index 1213e7e6..25c9411f 100644
--- a/src/android/post_processor.h
+++ b/src/android/post_processor.h
@@ -7,6 +7,8 @@
#ifndef __ANDROID_POST_PROCESSOR_H__
#define __ANDROID_POST_PROCESSOR_H__
+#include <libcamera/base/signal.h>
+
#include <libcamera/framebuffer.h>
#include <libcamera/stream.h>
@@ -28,6 +30,12 @@ public:
const CameraMetadata &requestMetadata,
CameraMetadata *resultMetadata,
const Camera3RequestDescriptor *context) = 0;
+
+ enum Status {
+ Succeeded,
+ Failed,
+ };
+ libcamera::Signal<Status, const Camera3RequestDescriptor *> processComplete;
};
#endif /* __ANDROID_POST_PROCESSOR_H__ */
diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp
index 13a78abe..d2df110a 100644
--- a/src/android/yuv/post_processor_yuv.cpp
+++ b/src/android/yuv/post_processor_yuv.cpp
@@ -61,6 +61,7 @@ int PostProcessorYuv::process(const FrameBuffer *source,
const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read);
if (!sourceMapped.isValid()) {
LOG(YUV, Error) << "Failed to mmap camera frame buffer";
+ processComplete.emit(PostProcessor::Status::Failed, context);
return -EINVAL;
}
@@ -78,9 +79,12 @@ int PostProcessorYuv::process(const FrameBuffer *source,
libyuv::FilterMode::kFilterBilinear);
if (ret) {
LOG(YUV, Error) << "Failed NV12 scaling: " << ret;
+ processComplete.emit(PostProcessor::Status::Failed, context);
return -EINVAL;
}
+ processComplete.emit(PostProcessor::Status::Succeeded, context);
+
return 0;
}
--
2.31.1
More information about the libcamera-devel
mailing list