[libcamera-devel] [PATCH 03/13] libcamera: pipeline: Add method to prepare buffer for IPA

Jacopo Mondi jacopo at jmondi.org
Wed Aug 28 18:02:49 CEST 2019


Hi Niklas,

On Wed, Aug 28, 2019 at 03:17:00AM +0200, Niklas Söderlund wrote:
> The pipeline handlers dealing with buffers outside the request coming
> from an application needs to prepare Buffer objects before they can be
> used by other the libcamera functions. For objects coming from the user
> this is done by the Camera before the Buffers reach the pipeline
> handler. Add a new method prepareInternalBuffer() to aid with this
> preparation.

As clarified offline, this should be reworded to specify you're here
talking about internal buffers used by pipelines for
statistics/controls (also for internal buffer queues, like the
CIO2->IMGU one in the IPU3 ? )

>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/libcamera/include/pipeline_handler.h |  2 ++
>  src/libcamera/pipeline_handler.cpp       | 18 ++++++++++++++++++
>  2 files changed, 20 insertions(+)
>
> diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
> index ffc7adb802215313..91d40ef40a465c4e 100644
> --- a/src/libcamera/include/pipeline_handler.h
> +++ b/src/libcamera/include/pipeline_handler.h
> @@ -98,6 +98,8 @@ protected:
>
>  	CameraData *cameraData(const Camera *camera);
>
> +	void prepareInternalBuffer(Buffer *buffer, Request *request,
> +				   BufferMemory *mem);

Do you think this will expand ? Otherwise I wonder if this should not
be made Buffer operation, like Buffer::prepare(req, mem); or other
names that better convey the idea of initialization
outside-of-a-request...


>  	CameraManager *manager_;
>
>  private:
> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
> index 89b67806597728f9..766fd496306ece9c 100644
> --- a/src/libcamera/pipeline_handler.cpp
> +++ b/src/libcamera/pipeline_handler.cpp
> @@ -484,6 +484,24 @@ void PipelineHandler::hotplugMediaDevice(MediaDevice *media)
>  	media->disconnected.connect(this, &PipelineHandler::mediaDeviceDisconnected);
>  }
>
> +/**
> + * \brief Prepare buffer for internal usage by a pipeline handler
> + * \param[in,out] buffer The buffer to prepare
> + * \param[in] request The request to associate the \a buffer with
> + * \param[in] mem The memory to associate the \a buffer with
> + *
> + * Pipeline handlers creating internal buffers to facilitate data flow in the
> + * pipeline need to prepare the buffers by setting up the buffer object state.
> + * This function help pipeline handler implementations to perform this
> + * preparation.
> + */
> +void PipelineHandler::prepareInternalBuffer(Buffer *buffer, Request *request,
> +					    BufferMemory *mem)
> +{
> +	buffer->request_ = request;
> +	buffer->mem_ = mem;
> +}
> +
>  /**
>   * \brief Slot for the MediaDevice disconnected signal
>   */
> --
> 2.22.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190828/636bcab6/attachment.sig>


More information about the libcamera-devel mailing list