[libcamera-devel] [PATCH v3 5/9] ipu3: Update IPAIPU3Interface::fillParamsBuffer with captureBufferId
Cheng-Hao Yang
chenghaoyang at chromium.org
Tue Aug 2 12:31:02 CEST 2022
Hi Umang,
On Wed, Jul 27, 2022 at 4:55 PM Umang Jain <umang.jain at ideasonboard.com>
wrote:
> Hi Harvey,
>
> On 6/29/22 16:00, Harvey Yang via libcamera-devel wrote:
> > From: Harvey Yang <chenghaoyang at chromium.org>
> >
> > This patch updates the ipa interface |IPAIPU3Interface::fillParamsBuffer|
> > with additional |captureBufferId| to fill the param buffer for the
> > StillCapture stream as well.
>
>
> Whenever the IPAIPU3 Interface is updated,
>
> https://git.libcamera.org/libcamera/ipu3-ipa.git/tree/ (closed
> source IPA IPU3 wrapper)
>
> will need corresponding updates as well (Just mentioning for the records)
>
>
Will try later.
> >
> > Signed-off-by: Harvey Yang <chenghaoyang at chromium.org>
> > ---
> > include/libcamera/ipa/ipu3.mojom | 2 +-
> > src/ipa/ipu3/ipu3.cpp | 21 ++++++++++++++++++---
> > src/libcamera/pipeline/ipu3/ipu3.cpp | 3 ++-
> > 3 files changed, 21 insertions(+), 5 deletions(-)
> >
> > diff --git a/include/libcamera/ipa/ipu3.mojom
> b/include/libcamera/ipa/ipu3.mojom
> > index d1b1c6b8..d94c344e 100644
> > --- a/include/libcamera/ipa/ipu3.mojom
> > +++ b/include/libcamera/ipa/ipu3.mojom
> > @@ -31,7 +31,7 @@ interface IPAIPU3Interface {
> > unmapBuffers(array<uint32> ids);
> >
> > [async] queueRequest(uint32 frame, libcamera.ControlList controls);
> > - [async] fillParamsBuffer(uint32 frame, uint32 bufferId);
> > + [async] fillParamsBuffer(uint32 frame, uint32 bufferId, uint32
> captureBufferId);
> > [async] processStatsBuffer(uint32 frame, int64 frameTimestamp,
> > uint32 bufferId, libcamera.ControlList
> sensorControls);
> > };
> > diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
> > index dd6cfd79..149a3958 100644
> > --- a/src/ipa/ipu3/ipu3.cpp
> > +++ b/src/ipa/ipu3/ipu3.cpp
> > @@ -146,7 +146,8 @@ public:
> > void unmapBuffers(const std::vector<unsigned int> &ids) override;
> >
> > void queueRequest(const uint32_t frame, const ControlList
> &controls) override;
> > - void fillParamsBuffer(const uint32_t frame, const uint32_t
> bufferId) override;
> > + void fillParamsBuffer(const uint32_t frame, const uint32_t
> bufferId,
> > + const uint32_t captureBufferId) override;
> > void processStatsBuffer(const uint32_t frame, const int64_t
> frameTimestamp,
> > const uint32_t bufferId,
> > const ControlList &sensorControls)
> override;
> > @@ -508,12 +509,14 @@ void IPAIPU3::unmapBuffers(const
> std::vector<unsigned int> &ids)
> > /**
> > * \brief Fill and return a buffer with ISP processing parameters for
> a frame
> > * \param[in] frame The frame number
> > - * \param[in] bufferId ID of the parameter buffer to fill
> > + * \param[in] bufferId ID of the video parameter buffer to fill
> > + * \param[in] captureBufferId ID of the capture parameter buffer to fill
> > *
> > * Algorithms are expected to fill the IPU3 parameter buffer for the
> next
> > * frame given their most recent processing of the ImgU statistics.
> > */
> > -void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t
> bufferId)
> > +void IPAIPU3::fillParamsBuffer(const uint32_t frame, const uint32_t
> bufferId,
>
>
> Since now there are couple of parameter buffers to fill, this can be
> renamed to depict plural buffers:
>
> IPAIPU3::fillParamsBuffers(const uint32_t frame, const uint32_t
> bufferId,
>
>
Right, thanks!
> > + const uint32_t captureBufferId)
> > {
> > auto it = buffers_.find(bufferId);
> > if (it == buffers_.end()) {
> > @@ -536,6 +539,18 @@ void IPAIPU3::fillParamsBuffer(const uint32_t
> frame, const uint32_t bufferId)
> > */
> > params->use = {};
> >
> > + for (auto const &algo : algorithms_)
> > + algo->prepare(context_, params);
> > +
> > + // TODO: use different algorithms to set StillCapture params.
>
>
> Can you provide a brief summary here, specific to algorithms targetting
> StillCapture use-case? How would they differ (and I wonder if they
> work/need statistics from Imgu1).
>
>
Hi Han-lin,
Can you help clarify this? I'm also not sure how the algorithms should be
different for YUV/StillCapture use cases, with the same statistics from the
YUV.
Thanks!
> > + it = buffers_.find(captureBufferId);
> > + if (it == buffers_.end()) {
> > + LOG(IPAIPU3, Error) << "Could not find capture param
> buffer!";
> > + return;
> > + }
> > + mem = it->second.planes()[0];
> > + params = reinterpret_cast<ipu3_uapi_params *>(mem.data());
> > + params->use = {};
> > for (auto const &algo : algorithms_)
> > algo->prepare(context_, params);
> >
> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp
> b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > index a201c5ca..a13fb881 100644
> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> > @@ -1424,7 +1424,8 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer
> *buffer)
> > if (request->findBuffer(&rawStream_))
> > pipe()->completeBuffer(request, buffer);
> >
> > - ipa_->fillParamsBuffer(info->id, info->paramBuffer->cookie());
> > + ipa_->fillParamsBuffer(info->id, info->paramBuffer->cookie(),
> > + info->captureParamBuffer->cookie());
> > }
> >
> > void IPU3CameraData::paramBufferReady(FrameBuffer *buffer)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20220802/7365befa/attachment.htm>
More information about the libcamera-devel
mailing list