[libcamera-devel] [PATCH 1/2] ipa: rkisp1: Split queuing of request and parameter filling
paul.elder at ideasonboard.com
paul.elder at ideasonboard.com
Fri Apr 1 10:31:16 CEST 2022
Hi Umang,
On Thu, Mar 31, 2022 at 10:27:24PM +0530, Umang Jain via libcamera-devel wrote:
> Queuing of request (i.e. passing of controls to the IPA)
> and filling of the parameters buffer are two separate operations.
> Treat them as such by splitting them into two functions in
> the rkisp1 IPA interface.
>
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> include/libcamera/ipa/rkisp1.mojom | 4 ++--
> src/ipa/rkisp1/rkisp1.cpp | 11 ++++++++---
> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 +++--
> 3 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom
> index f50f1e11..e3537385 100644
> --- a/include/libcamera/ipa/rkisp1.mojom
> +++ b/include/libcamera/ipa/rkisp1.mojom
> @@ -23,8 +23,8 @@ interface IPARkISP1Interface {
> mapBuffers(array<libcamera.IPABuffer> buffers);
> unmapBuffers(array<uint32> ids);
>
> - [async] queueRequest(uint32 frame, uint32 bufferId,
> - libcamera.ControlList reqControls);
> + [async] queueRequest(uint32 frame, libcamera.ControlList reqControls);
> + [async] fillParamsBuffer(uint32 frame, uint32 bufferId);
> [async] processStatsBuffer(uint32 frame, uint32 bufferId,
> libcamera.ControlList sensorControls);
> };
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index 13ab1cdc..ef1f0d56 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -54,8 +54,8 @@ public:
> void mapBuffers(const std::vector<IPABuffer> &buffers) override;
> void unmapBuffers(const std::vector<unsigned int> &ids) override;
>
> - void queueRequest(const uint32_t frame, const uint32_t bufferId,
> - const ControlList &controls) override;
> + void queueRequest(const uint32_t frame, const ControlList &controls) override;
> + void fillParamsBuffer(const uint32_t frame, const uint32_t bufferId) override;
> void processStatsBuffer(const uint32_t frame, const uint32_t bufferId,
> const ControlList &sensorControls) override;
> private:
> @@ -235,8 +235,13 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)
> }
> }
>
> -void IPARkISP1::queueRequest(const uint32_t frame, const uint32_t bufferId,
> +void IPARkISP1::queueRequest([[maybe_unused]] const uint32_t frame,
> [[maybe_unused]] const ControlList &controls)
> +{
> + /* \todo Start processing for 'frame' based on 'controls'. */
> +}
> +
> +void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)
> {
> rkisp1_params_cfg *params =
> reinterpret_cast<rkisp1_params_cfg *>(
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index e6fc582b..1624e2ec 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -855,8 +855,9 @@ int PipelineHandlerRkISP1::queueRequestDevice(Camera *camera, Request *request)
> if (!info)
> return -ENOENT;
>
> - data->ipa_->queueRequest(data->frame_, info->paramBuffer->cookie(),
> - request->controls());
> + data->ipa_->queueRequest(data->frame_, request->controls());
> + data->ipa_->fillParamsBuffer(data->frame_, info->paramBuffer->cookie());
> +
> data->frame_++;
>
> return 0;
> --
> 2.31.0
>
More information about the libcamera-devel
mailing list