Message ID | 20211018132923.476242-2-umang.jain@ideasonboard.com |
---|---|
State | Superseded |
Delegated to: | Umang Jain |
Headers | show |
Series |
|
Related | show |
Hi Umang, Thank you for the patch. On Mon, Oct 18, 2021 at 06:59:13PM +0530, Umang Jain wrote: > 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@ideasonboard.com> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > 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 90186710..b4ab5da1 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',
Hi Umang, On Mon, Oct 18, 2021 at 06:59:13PM +0530, Umang Jain wrote: > 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@ideasonboard.com> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.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 90186710..b4ab5da1 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 >
Hi Umang, On Tue, Oct 19, 2021 at 12:25 AM Jacopo Mondi <jacopo@jmondi.org> wrote: > > Hi Umang, > > On Mon, Oct 18, 2021 at 06:59:13PM +0530, Umang Jain wrote: > > 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@ideasonboard.com> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> > Reviewed-by: Hirokazu Honda <hiroh@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 90186710..b4ab5da1 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 > >
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 90186710..b4ab5da1 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',