[libcamera-devel] [PATCH 10/15] android: camera_stream: Allocate FrameBuffers
Jacopo Mondi
jacopo at jmondi.org
Tue Oct 6 14:40:47 CEST 2020
Hi Kieran
On Tue, Oct 06, 2020 at 01:29:30PM +0100, Kieran Bingham wrote:
> Hi Jacopo
>
> On 05/10/2020 13:28, Laurent Pinchart wrote:
> > 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.
>
> If we know that now, should we update the patch earlier to put it there
> in the first place?
>
> (Or is that more effort than it's worth, or possible not correct at that
> point in the series).
It is not required before CameraStream::configure() has to allocate
buffers, so I think the change should happen at the same time.
>
>
> >>
> >> 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.
>
>
> If the configure gets moved in the patch when it is originally added,
> and this buffers_.push_back gets moved to patch 12/15 - the only thing
> left here might be the allocate - which at that piont might also be
> easily squashed into 12/15... but it's not a requirement - just what
> might happen if the other blocks reduce this patch to very little ;-)
>
I've moved everything to patch 12/15
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> If it stays otherwise:
>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
Thanks
j
>
> >
> >> + }
> >>
> >> 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
> --
> Kieran
More information about the libcamera-devel
mailing list