[libcamera-devel] [PATCH v2 09/11] libcamera: ipu3: Map buffers in IPA

Jacopo Mondi jacopo at jmondi.org
Thu Jan 7 17:37:01 CET 2021


Hi Niklas,

On Tue, Dec 29, 2020 at 05:03:16PM +0100, Niklas Söderlund wrote:
> Map and unmap the parameters and statistic buffers in the IPA when the
> pipeline handler allocates and frees the buffers.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/libcamera/pipeline/ipu3/ipu3.cpp | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 95f1b75dc8be5d40..141066c528890c8e 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -138,6 +138,8 @@ private:
>  	ImgUDevice imgu1_;
>  	MediaDevice *cio2MediaDev_;
>  	MediaDevice *imguMediaDev_;
> +
> +	std::vector<IPABuffer> ipaBuffers_;
>  };
>
>  IPU3CameraConfiguration::IPU3CameraConfiguration(IPU3CameraData *data)
> @@ -583,6 +585,23 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)
>  	if (ret < 0)
>  		return ret;
>
> +	/* Map buffers to the IPA. */
> +	unsigned int ipaBufferId = 1;
> +
> +	for (const std::unique_ptr<FrameBuffer> &buffer : imgu->paramBuffers_) {
> +		buffer->setCookie(ipaBufferId++);
> +		ipaBuffers_.push_back({ .id = buffer->cookie(),

You can reserve space in ipaBuffers_

> +					.planes = buffer->planes() });
> +	}
> +
> +	for (const std::unique_ptr<FrameBuffer> &buffer : imgu->statBuffers_) {
> +		buffer->setCookie(ipaBufferId++);
> +		ipaBuffers_.push_back({ .id = buffer->cookie(),
> +					.planes = buffer->planes() });
> +	}
> +
> +	data->ipa_->mapBuffers(ipaBuffers_);
> +
>  	return 0;
>  }
>
> @@ -590,6 +609,13 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)
>  {
>  	IPU3CameraData *data = cameraData(camera);
>
> +	std::vector<unsigned int> ids;

You can reserve(ipaBuffers_.size())

> +	for (IPABuffer &ipabuf : ipaBuffers_)
> +		ids.push_back(ipabuf.id);
> +
> +	data->ipa_->unmapBuffers(ids);
> +	ipaBuffers_.clear();
> +

Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks
  j

>  	data->imgu_->freeBuffers();
>
>  	return 0;
> --
> 2.29.2
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list