[libcamera-devel] [PATCH 10/15] android: camera_stream: Allocate FrameBuffers
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Oct 5 14:28:16 CEST 2020
Hi Jacopo,
Thank you for the patch.
On Mon, Oct 05, 2020 at 01:46:44PM +0300, Laurent Pinchart wrote:
> From: Jacopo Mondi <jacopo at jmondi.org>
>
> Allocate FrameBuffers using the allocator_ class member in the
> CameraStream class at CameraStream::configure() time.
>
> As FrameBuffer allocation can only happen after the Camera has been
> correctly configured, move the CameraStream configuration loop
> after the Camera::configure() call in CameraDevice.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> src/android/camera_device.cpp | 22 +++++++++++-----------
> src/android/camera_stream.cpp | 17 +++++++++++++++--
> src/android/camera_stream.h | 2 ++
> 3 files changed, 28 insertions(+), 13 deletions(-)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index adaec54dbfdb..537883b63f15 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -1282,6 +1282,17 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> return -EINVAL;
> }
>
> + /*
> + * Once the CameraConfiguration has been adjusted/validated
> + * it can be applied to the camera.
> + */
> + int ret = camera_->configure(config_.get());
> + if (ret) {
> + LOG(HAL, Error) << "Failed to configure camera '"
> + << camera_->id() << "'";
> + return ret;
> + }
> +
> /*
> * Configure the HAL CameraStream instances using the associated
> * StreamConfiguration and set the number of required buffers in
> @@ -1300,17 +1311,6 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> stream->max_buffers = cfg.bufferCount;
> }
>
> - /*
> - * Once the CameraConfiguration has been adjusted/validated
> - * it can be applied to the camera.
> - */
> - int ret = camera_->configure(config_.get());
> - if (ret) {
> - LOG(HAL, Error) << "Failed to configure camera '"
> - << camera_->id() << "'";
> - return ret;
> - }
> -
> return 0;
> }
>
> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
> index 9f3e7026b1a4..76e7d240f4e7 100644
> --- a/src/android/camera_stream.cpp
> +++ b/src/android/camera_stream.cpp
> @@ -58,8 +58,21 @@ const Size &CameraStream::size() const
>
> int CameraStream::configure(const libcamera::StreamConfiguration &cfg)
> {
> - if (encoder_)
> - return encoder_->configure(cfg);
> + if (encoder_) {
> + int ret = encoder_->configure(cfg);
> + if (ret)
> + return ret;
> + }
> +
> + if (allocator_) {
> + int ret = allocator_->allocate(stream());
> + if (ret < 0)
> + return ret;
> +
> + /* Save a pointer to the reserved frame buffers */
> + for (const auto &frameBuffer : allocator_->buffers(stream()))
> + buffers_.push_back(frameBuffer.get());
I'd move this to patch 12/15, it's not clear in this patch why you need
it.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + }
>
> return 0;
> }
> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
> index eaf4357ed096..e399e17b2a2f 100644
> --- a/src/android/camera_stream.h
> +++ b/src/android/camera_stream.h
> @@ -8,6 +8,7 @@
> #define __ANDROID_CAMERA_STREAM_H__
>
> #include <memory>
> +#include <vector>
>
> #include <hardware/camera3.h>
>
> @@ -140,6 +141,7 @@ private:
> libcamera::CameraConfiguration *config_;
> Encoder *encoder_;
> libcamera::FrameBufferAllocator *allocator_;
> + std::vector<libcamera::FrameBuffer *> buffers_;
> };
>
> #endif /* __ANDROID_CAMERA_STREAM__ */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list