[libcamera-devel] [PATCH] android: Modify PostProcessor interface

Hirokazu Honda hiroh at chromium.org
Mon Oct 19 10:03:23 CEST 2020


This modifies PostProcessor interface and polishes the code
around the PostProcessor.

Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
---
 src/android/camera_stream.cpp            | 9 ++++-----
 src/android/camera_stream.h              | 8 ++++----
 src/android/jpeg/encoder.h               | 6 +++---
 src/android/jpeg/encoder_libjpeg.cpp     | 6 +++---
 src/android/jpeg/encoder_libjpeg.h       | 4 ++--
 src/android/jpeg/post_processor_jpeg.cpp | 8 +++++---
 src/android/jpeg/post_processor_jpeg.h   | 6 +++---
 src/android/post_processor.h             | 4 ++--
 8 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
index 1b8afa8..cc8691d 100644
--- a/src/android/camera_stream.cpp
+++ b/src/android/camera_stream.cpp
@@ -40,11 +40,10 @@ LOG_DECLARE_CATEGORY(HAL);
 
 CameraStream::CameraStream(CameraDevice *cameraDevice, Type type,
 			   camera3_stream_t *camera3Stream, unsigned int index)
-	: cameraDevice_(cameraDevice), type_(type),
+	: cameraDevice_(cameraDevice),
+	  config_(cameraDevice_->cameraConfiguration()), type_(type),
 	  camera3Stream_(camera3Stream), index_(index)
 {
-	config_ = cameraDevice_->cameraConfiguration();
-
 	if (type_ == Type::Internal || type_ == Type::Mapped) {
 		/*
 		 * \todo There might be multiple post-processors. The logic
@@ -52,7 +51,7 @@ CameraStream::CameraStream(CameraDevice *cameraDevice, Type type,
 		 * future. For now, we only have PostProcessorJpeg and that
 		 * is what we instantiate here.
 		 */
-		postProcessor_ = std::make_unique<PostProcessorJpeg>(cameraDevice_);
+		postProcessor_ = std::make_unique<PostProcessorJpeg>(cameraDevice);
 	}
 
 	if (type == Type::Internal) {
@@ -102,7 +101,7 @@ int CameraStream::process(const libcamera::FrameBuffer &source,
 	if (!postProcessor_)
 		return 0;
 
-	return postProcessor_->process(&source, dest->maps()[0], metadata);
+	return postProcessor_->process(source, dest->maps()[0], metadata);
 }
 
 FrameBuffer *CameraStream::getBuffer()
diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
index c367a5f..24e66bb 100644
--- a/src/android/camera_stream.h
+++ b/src/android/camera_stream.h
@@ -124,11 +124,11 @@ public:
 	void putBuffer(libcamera::FrameBuffer *buffer);
 
 private:
-	CameraDevice *cameraDevice_;
-	libcamera::CameraConfiguration *config_;
-	Type type_;
+	CameraDevice const *cameraDevice_;
+	const libcamera::CameraConfiguration *config_;
+	const Type type_;
 	camera3_stream_t *camera3Stream_;
-	unsigned int index_;
+	const unsigned int index_;
 
 	std::unique_ptr<libcamera::FrameBufferAllocator> allocator_;
 	std::vector<libcamera::FrameBuffer *> buffers_;
diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h
index 4483153..270ea60 100644
--- a/src/android/jpeg/encoder.h
+++ b/src/android/jpeg/encoder.h
@@ -14,11 +14,11 @@
 class Encoder
 {
 public:
-	virtual ~Encoder() {};
+	virtual ~Encoder() {}
 
 	virtual int configure(const libcamera::StreamConfiguration &cfg) = 0;
-	virtual int encode(const libcamera::FrameBuffer *source,
-			   const libcamera::Span<uint8_t> &destination,
+	virtual int encode(const libcamera::FrameBuffer &source,
+			   libcamera::Span<uint8_t> destination,
 			   const libcamera::Span<const uint8_t> &exifData) = 0;
 };
 
diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp
index 8995ba5..4236c9d 100644
--- a/src/android/jpeg/encoder_libjpeg.cpp
+++ b/src/android/jpeg/encoder_libjpeg.cpp
@@ -179,11 +179,11 @@ void EncoderLibJpeg::compressNV(const libcamera::MappedBuffer *frame)
 	}
 }
 
-int EncoderLibJpeg::encode(const FrameBuffer *source,
-			   const libcamera::Span<uint8_t> &dest,
+int EncoderLibJpeg::encode(const FrameBuffer &source,
+			   libcamera::Span<uint8_t> dest,
 			   const libcamera::Span<const uint8_t> &exifData)
 {
-	MappedFrameBuffer frame(source, PROT_READ);
+	MappedFrameBuffer frame(&source, PROT_READ);
 	if (!frame.isValid()) {
 		LOG(JPEG, Error) << "Failed to map FrameBuffer : "
 				 << strerror(frame.error());
diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h
index 934caef..391a53c 100644
--- a/src/android/jpeg/encoder_libjpeg.h
+++ b/src/android/jpeg/encoder_libjpeg.h
@@ -21,8 +21,8 @@ public:
 	~EncoderLibJpeg();
 
 	int configure(const libcamera::StreamConfiguration &cfg) override;
-	int encode(const libcamera::FrameBuffer *source,
-		   const libcamera::Span<uint8_t> &destination,
+	int encode(const libcamera::FrameBuffer &source,
+		   libcamera::Span<uint8_t> destination,
 		   const libcamera::Span<const uint8_t> &exifData) override;
 
 private:
diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index 753c28e..4ded3e3 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -44,8 +44,8 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg,
 	return encoder_->configure(inCfg);
 }
 
-int PostProcessorJpeg::process(const libcamera::FrameBuffer *source,
-			       const libcamera::Span<uint8_t> &destination,
+int PostProcessorJpeg::process(const libcamera::FrameBuffer &source,
+			       libcamera::Span<uint8_t> destination,
 			       CameraMetadata *metadata)
 {
 	if (!encoder_)
@@ -64,8 +64,10 @@ int PostProcessorJpeg::process(const libcamera::FrameBuffer *source,
 	 * second, it is good enough.
 	 */
 	exif.setTimestamp(std::time(nullptr));
-	if (exif.generate() != 0)
+	if (exif.generate() != 0) {
 		LOG(JPEG, Error) << "Failed to generate valid EXIF data";
+		return -EINVAL;
+	}
 
 	int jpeg_size = encoder_->encode(source, destination, exif.data());
 	if (jpeg_size < 0) {
diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
index 62c8650..4d8edf5 100644
--- a/src/android/jpeg/post_processor_jpeg.h
+++ b/src/android/jpeg/post_processor_jpeg.h
@@ -23,12 +23,12 @@ public:
 
 	int configure(const libcamera::StreamConfiguration &incfg,
 		      const libcamera::StreamConfiguration &outcfg) override;
-	int process(const libcamera::FrameBuffer *source,
-		    const libcamera::Span<uint8_t> &destination,
+	int process(const libcamera::FrameBuffer &source,
+		    libcamera::Span<uint8_t> destination,
 		    CameraMetadata *metadata) override;
 
 private:
-	CameraDevice *cameraDevice_;
+	CameraDevice const *cameraDevice_;
 	std::unique_ptr<Encoder> encoder_;
 	libcamera::Size streamSize_;
 };
diff --git a/src/android/post_processor.h b/src/android/post_processor.h
index a891c43..5f87a5d 100644
--- a/src/android/post_processor.h
+++ b/src/android/post_processor.h
@@ -20,8 +20,8 @@ public:
 
 	virtual int configure(const libcamera::StreamConfiguration &inCfg,
 			      const libcamera::StreamConfiguration &outCfg) = 0;
-	virtual int process(const libcamera::FrameBuffer *source,
-			    const libcamera::Span<uint8_t> &destination,
+	virtual int process(const libcamera::FrameBuffer &source,
+			    libcamera::Span<uint8_t> destination,
 			    CameraMetadata *metadata) = 0;
 };
 
-- 
2.29.0.rc1.297.gfa9743e501-goog



More information about the libcamera-devel mailing list