Message ID | 20210121101549.134574-7-paul.elder@ideasonboard.com |
---|---|
State | Superseded |
Delegated to: | Paul Elder |
Headers | show |
Series |
|
Related | show |
Hi Paul, Thank you for the patch. On Thu, Jan 21, 2021 at 07:15:46PM +0900, Paul Elder wrote: > 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@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@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;
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;
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@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(-)