summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/android/camera_device.cpp43
-rw-r--r--src/android/camera_device.h27
-rw-r--r--src/android/camera_request.cpp45
-rw-r--r--src/android/camera_request.h46
-rw-r--r--src/android/meson.build1
5 files changed, 99 insertions, 63 deletions
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)
@@ -214,41 +216,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
*
* The CameraDevice class wraps a libcamera::Camera instance, and implements
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',