[libcamera-devel] [PATCH v2 01/12] camera_device: Remove private scope of Camera3RequestDescriptor
Umang Jain
umang.jain at ideasonboard.com
Tue Oct 19 13:47:51 CEST 2021
Camera3RequestDescriptor is a utility structure that groups information
about a capture request. It can be and will be extended to preserve the
context of a capture overall. Since the context of a capture needs to
be shared among other classes (for e.g. CameraStream) having a private
definition of the struct in CameraDevice class doesn't help.
Hence, de-scope the structure so that it can be shared with other
components (through references or pointers). Splitting the structure to
a separate file will help avoiding circular dependencies when using it
through the HAL implementation.
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Hirokazu Honda <hiroh at chromium.org>
---
src/android/camera_device.cpp | 43 ++++---------------------------
src/android/camera_device.h | 27 ++------------------
src/android/camera_request.cpp | 45 +++++++++++++++++++++++++++++++++
src/android/camera_request.h | 46 ++++++++++++++++++++++++++++++++++
src/android/meson.build | 1 +
5 files changed, 99 insertions(+), 63 deletions(-)
create mode 100644 src/android/camera_request.cpp
create mode 100644 src/android/camera_request.h
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index fe29b7bc..3689940d 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -6,9 +6,6 @@
*/
#include "camera_device.h"
-#include "camera_hal_config.h"
-#include "camera_ops.h"
-#include "post_processor.h"
#include <algorithm>
#include <fstream>
@@ -27,6 +24,11 @@
#include "system/graphics.h"
+#include "camera_hal_config.h"
+#include "camera_ops.h"
+#include "camera_request.h"
+#include "post_processor.h"
+
using namespace libcamera;
LOG_DECLARE_CATEGORY(HAL)
@@ -213,41 +215,6 @@ bool validateCropRotate(const camera3_stream_configuration_t &streamList)
} /* namespace */
-/*
- * \struct Camera3RequestDescriptor
- *
- * A utility structure that groups information about a capture request to be
- * later re-used at request complete time to notify the framework.
- */
-
-CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor(
- Camera *camera, const camera3_capture_request_t *camera3Request)
-{
- frameNumber_ = camera3Request->frame_number;
-
- /* Copy the camera3 request stream information for later access. */
- const uint32_t numBuffers = camera3Request->num_output_buffers;
- buffers_.resize(numBuffers);
- for (uint32_t i = 0; i < numBuffers; i++)
- buffers_[i] = camera3Request->output_buffers[i];
-
- /*
- * FrameBuffer instances created by wrapping a camera3 provided dmabuf
- * are emplaced in this vector of unique_ptr<> for lifetime management.
- */
- frameBuffers_.reserve(numBuffers);
-
- /* Clone the controls associated with the camera3 request. */
- settings_ = CameraMetadata(camera3Request->settings);
-
- /*
- * Create the CaptureRequest, stored as a unique_ptr<> to tie its
- * lifetime to the descriptor.
- */
- request_ = std::make_unique<CaptureRequest>(camera,
- reinterpret_cast<uint64_t>(this));
-}
-
/*
* \class CameraDevice
*
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index b7d774fe..86224aa1 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -33,7 +33,9 @@
#include "camera_worker.h"
#include "jpeg/encoder.h"
+struct Camera3RequestDescriptor;
struct CameraConfigData;
+
class CameraDevice : protected libcamera::Loggable
{
public:
@@ -73,31 +75,6 @@ private:
CameraDevice(unsigned int id, std::shared_ptr<libcamera::Camera> camera);
- struct Camera3RequestDescriptor {
- enum class Status {
- Pending,
- Success,
- Error,
- };
-
- Camera3RequestDescriptor() = default;
- ~Camera3RequestDescriptor() = default;
- Camera3RequestDescriptor(libcamera::Camera *camera,
- const camera3_capture_request_t *camera3Request);
- Camera3RequestDescriptor &operator=(Camera3RequestDescriptor &&) = default;
-
- bool isPending() const { return status_ == Status::Pending; }
-
- uint32_t frameNumber_ = 0;
- std::vector<camera3_stream_buffer_t> buffers_;
- std::vector<std::unique_ptr<libcamera::FrameBuffer>> frameBuffers_;
- CameraMetadata settings_;
- std::unique_ptr<CaptureRequest> request_;
-
- camera3_capture_result_t captureResult_ = {};
- Status status_ = Status::Pending;
- };
-
enum class State {
Stopped,
Flushing,
diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp
new file mode 100644
index 00000000..93e546bf
--- /dev/null
+++ b/src/android/camera_request.cpp
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019-2021, Google Inc.
+ *
+ * camera_request.cpp - libcamera Android Camera Request Descriptor
+ */
+
+#include "camera_request.h"
+
+using namespace libcamera;
+
+/*
+ * \struct Camera3RequestDescriptor
+ *
+ * A utility structure that groups information about a capture request to be
+ * later re-used at request complete time to notify the framework.
+ */
+
+Camera3RequestDescriptor::Camera3RequestDescriptor(
+ Camera *camera, const camera3_capture_request_t *camera3Request)
+{
+ frameNumber_ = camera3Request->frame_number;
+
+ /* Copy the camera3 request stream information for later access. */
+ const uint32_t numBuffers = camera3Request->num_output_buffers;
+ buffers_.resize(numBuffers);
+ for (uint32_t i = 0; i < numBuffers; i++)
+ buffers_[i] = camera3Request->output_buffers[i];
+
+ /*
+ * FrameBuffer instances created by wrapping a camera3 provided dmabuf
+ * are emplaced in this vector of unique_ptr<> for lifetime management.
+ */
+ frameBuffers_.reserve(numBuffers);
+
+ /* Clone the controls associated with the camera3 request. */
+ settings_ = CameraMetadata(camera3Request->settings);
+
+ /*
+ * Create the CaptureRequest, stored as a unique_ptr<> to tie its
+ * lifetime to the descriptor.
+ */
+ request_ = std::make_unique<CaptureRequest>(camera,
+ reinterpret_cast<uint64_t>(this));
+}
diff --git a/src/android/camera_request.h b/src/android/camera_request.h
new file mode 100644
index 00000000..1346f6fa
--- /dev/null
+++ b/src/android/camera_request.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019-2021, Google Inc.
+ *
+ * camera_request.h - libcamera Android Camera Request Descriptor
+ */
+#ifndef __ANDROID_CAMERA_REQUEST_H__
+#define __ANDROID_CAMERA_REQUEST_H__
+
+#include <memory>
+#include <vector>
+
+#include <libcamera/camera.h>
+#include <libcamera/framebuffer.h>
+
+#include <hardware/camera3.h>
+
+#include "camera_metadata.h"
+#include "camera_worker.h"
+
+struct Camera3RequestDescriptor {
+ enum class Status {
+ Pending,
+ Success,
+ Error,
+ };
+
+ Camera3RequestDescriptor() = default;
+ ~Camera3RequestDescriptor() = default;
+ Camera3RequestDescriptor(libcamera::Camera *camera,
+ const camera3_capture_request_t *camera3Request);
+ Camera3RequestDescriptor &operator=(Camera3RequestDescriptor &&) = default;
+
+ bool isPending() const { return status_ == Status::Pending; }
+
+ uint32_t frameNumber_ = 0;
+ std::vector<camera3_stream_buffer_t> buffers_;
+ std::vector<std::unique_ptr<libcamera::FrameBuffer>> frameBuffers_;
+ CameraMetadata settings_;
+ std::unique_ptr<CaptureRequest> request_;
+
+ camera3_capture_result_t captureResult_ = {};
+ Status status_ = Status::Pending;
+};
+
+#endif /* __ANDROID_CAMERA_REQUEST_H__ */
diff --git a/src/android/meson.build b/src/android/meson.build
index 7d1e7e85..332b177c 100644
--- a/src/android/meson.build
+++ b/src/android/meson.build
@@ -45,6 +45,7 @@ android_hal_sources = files([
'camera_hal_manager.cpp',
'camera_metadata.cpp',
'camera_ops.cpp',
+ 'camera_request.cpp',
'camera_stream.cpp',
'camera_worker.cpp',
'jpeg/encoder_libjpeg.cpp',
--
2.31.0
More information about the libcamera-devel
mailing list