[libcamera-devel] [PATCH v2 1/3] android: camera_stream: Create post porcessor in configure()
Jacopo Mondi
jacopo at jmondi.org
Fri Aug 20 15:56:32 CEST 2021
Hi Hiro,
On Fri, Aug 20, 2021 at 05:12:12AM +0900, Hirokazu Honda wrote:
> CameraStream creates PostProcessor and FrameBufferAllocator in
> the constructor. CameraStream assumes that a used post processor
> is JPEG post processor. Since we need to support various post
> processors, we would rather move the creation to configure() so
> as to return an error code if no proper post processor is found.
> This also moves FrameBufferAllocator and Mutex creation for
> consistency.
>
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> ---
> src/android/camera_device.h | 1 +
> src/android/camera_stream.cpp | 36 ++++++++++++++++++-----------------
> 2 files changed, 20 insertions(+), 17 deletions(-)
>
> diff --git a/src/android/camera_device.h b/src/android/camera_device.h
> index dd9aebba..abe8ca44 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -46,6 +46,7 @@ public:
>
> unsigned int id() const { return id_; }
> camera3_device_t *camera3Device() { return &camera3Device_; }
> + const CameraCapabilities *capabilities() const { return &capabilities_; }
> const std::shared_ptr<libcamera::Camera> &camera() const { return camera_; }
>
> const std::string &maker() const { return maker_; }
> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
> index 61b44183..c205cd7a 100644
> --- a/src/android/camera_stream.cpp
> +++ b/src/android/camera_stream.cpp
> @@ -10,6 +10,7 @@
> #include <sys/mman.h>
>
> #include "camera_buffer.h"
> +#include "camera_capabilities.h"
> #include "camera_device.h"
> #include "camera_metadata.h"
> #include "jpeg/post_processor_jpeg.h"
> @@ -47,20 +48,6 @@ CameraStream::CameraStream(CameraDevice *const cameraDevice,
> : cameraDevice_(cameraDevice), config_(config), type_(type),
> camera3Stream_(camera3Stream), index_(index)
> {
> - if (type_ == Type::Internal || type_ == Type::Mapped) {
> - /*
> - * \todo There might be multiple post-processors. The logic
> - * which should be instantiated here, is deferred for the
> - * future. For now, we only have PostProcessorJpeg and that
> - * is what we instantiate here.
> - */
> - postProcessor_ = std::make_unique<PostProcessorJpeg>(cameraDevice_);
> - }
> -
> - if (type == Type::Internal) {
> - allocator_ = std::make_unique<FrameBufferAllocator>(cameraDevice_->camera());
> - mutex_ = std::make_unique<std::mutex>();
> - }
> }
>
> const StreamConfiguration &CameraStream::configuration() const
> @@ -75,15 +62,30 @@ Stream *CameraStream::stream() const
>
> int CameraStream::configure()
> {
> - if (postProcessor_) {
> + if (type_ == Type::Internal || type_ == Type::Mapped) {
> + const PixelFormat outFormat =
> + cameraDevice_->capabilities()->toPixelFormat(camera3Stream_->format);
> StreamConfiguration output = configuration();
> - output.pixelFormat = formats::MJPEG;
> + output.pixelFormat = outFormat;
> + switch (outFormat) {
> + case formats::MJPEG:
> + postProcessor_ = std::make_unique<PostProcessorJpeg>(cameraDevice_);
I might have missed why for JPEG we don't set the output's size and
for YUV we do. But I might have missed some pieces...
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> + break;
> +
> + default:
> + LOG(HAL, Error) << "Unsupported format: " << outFormat;
> + return -EINVAL;
> + }
> +
> int ret = postProcessor_->configure(configuration(), output);
> if (ret)
> return ret;
> }
>
> - if (allocator_) {
> + if (type_ == Type::Internal) {
> + allocator_ = std::make_unique<FrameBufferAllocator>(cameraDevice_->camera());
> + mutex_ = std::make_unique<std::mutex>();
> +
> int ret = allocator_->allocate(stream());
> if (ret < 0)
> return ret;
> --
> 2.33.0.rc2.250.ged5fa647cd-goog
>
More information about the libcamera-devel
mailing list