[libcamera-devel] [PATCH v2 6/9] android: jpeg: Factor out thumbnailer configuration

Paul Elder paul.elder at ideasonboard.com
Thu Jan 21 11:15:46 CET 2021


Move configuration of the thumbnailer into a function so that it can be
called later in post-processing if a different size thumbnail is
requested.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>

---
New in v2
---
 src/android/jpeg/post_processor_jpeg.cpp | 26 ++++++++++++++++--------
 src/android/jpeg/post_processor_jpeg.h   |  2 ++
 src/android/jpeg/thumbnailer.h           |  1 +
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index 436a50f8..0c1226ad 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -25,6 +25,21 @@ PostProcessorJpeg::PostProcessorJpeg(CameraDevice *const device)
 {
 }
 
+int PostProcessorJpeg::configureThumbnailer(const Size &size,
+					    const PixelFormat &pixelFormat)
+{
+	thumbnailer_.configure(size, pixelFormat);
+	StreamConfiguration thCfg;
+	thCfg.size = thumbnailer_.size();
+	thCfg.pixelFormat = pixelFormat;
+	if (thumbnailEncoder_.configure(thCfg) != 0) {
+		LOG(JPEG, Error) << "Failed to configure thumbnail encoder";
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 int PostProcessorJpeg::configure(const StreamConfiguration &inCfg,
 				 const StreamConfiguration &outCfg)
 {
@@ -40,16 +55,11 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg,
 
 	streamSize_ = outCfg.size;
 
-	thumbnailer_.configure(inCfg.size, inCfg.pixelFormat);
-	StreamConfiguration thCfg = inCfg;
-	thCfg.size = thumbnailer_.size();
-	if (thumbnailEncoder_.configure(thCfg) != 0) {
-		LOG(JPEG, Error) << "Failed to configure thumbnail encoder";
-		return -EINVAL;
-	}
+	int ret = configureThumbnailer(inCfg.size, inCfg.pixelFormat);
+	if (ret)
+		return ret;
 
 	encoder_ = std::make_unique<EncoderLibJpeg>();
-
 	return encoder_->configure(inCfg);
 }
 
diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h
index 5afa831c..c545c29c 100644
--- a/src/android/jpeg/post_processor_jpeg.h
+++ b/src/android/jpeg/post_processor_jpeg.h
@@ -31,6 +31,8 @@ public:
 private:
 	void generateThumbnail(const libcamera::FrameBuffer &source,
 			       std::vector<unsigned char> *thumbnail);
+	int configureThumbnailer(const libcamera::Size &size,
+				 const libcamera::PixelFormat &pixelFormat);
 
 	CameraDevice *const cameraDevice_;
 	std::unique_ptr<Encoder> encoder_;
diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h
index 98f11833..f393db47 100644
--- a/src/android/jpeg/thumbnailer.h
+++ b/src/android/jpeg/thumbnailer.h
@@ -22,6 +22,7 @@ public:
 	void createThumbnail(const libcamera::FrameBuffer &source,
 			     std::vector<unsigned char> *dest);
 	const libcamera::Size &size() const { return targetSize_; }
+	const libcamera::PixelFormat &pixelFormat() const { return pixelFormat_; }
 
 private:
 	libcamera::Size computeThumbnailSize() const;
-- 
2.27.0



More information about the libcamera-devel mailing list