summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHirokazu Honda <hiroh@chromium.org>2021-09-01 17:03:00 +0900
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-22 10:58:37 +0300
commit76819971b9615a28131106e29918028e8dc160a7 (patch)
tree1dc6d511b4714fb80adbc730af270e1013e11a42
parent3e335b69b6ff65dff0e29f4bc316f8bc6d627f38 (diff)
android: camera_stream: Create post processor in configure()
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@chromium.org> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/android/camera_device.h1
-rw-r--r--src/android/camera_stream.cpp37
2 files changed, 21 insertions, 17 deletions
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index a5576927..296c2f18 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -48,6 +48,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 0f5ae947..4a1658b8 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,31 @@ 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_);
+ 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;