[5/5] libcamera: ipu3: Return Raw buffers on error
diff mbox series

Message ID 20240221174015.52958-6-jacopo.mondi@ideasonboard.com
State Superseded
Headers show
Series
  • libcamera: Replace IPU3/RkISP1FrameInfo
Related show

Commit Message

Jacopo Mondi Feb. 21, 2024, 5:40 p.m. UTC
When a Request is cancelled, all its application-provided buffers
are completed and the paramters and stats buffer are made available
again to the pipeline handler.

If the RAW buffer doesn't come from the application (no RAW stream
requested) it comes from the CIO2Device internal pool. Return it to
the CIO2 pool in case of error.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
 src/libcamera/pipeline/ipu3/ipu3.cpp | 3 +++
 1 file changed, 3 insertions(+)

Comments

Dan Scally March 5, 2024, 1:33 p.m. UTC | #1
Hi Jacopo

On 21/02/2024 17:40, Jacopo Mondi wrote:
> When a Request is cancelled, all its application-provided buffers
> are completed and the paramters and stats buffer are made available
> again to the pipeline handler.
>
> If the RAW buffer doesn't come from the application (no RAW stream
> requested) it comes from the CIO2Device internal pool. Return it to
> the CIO2 pool in case of error.
>
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> ---


That one's a good catch!


Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>

>   src/libcamera/pipeline/ipu3/ipu3.cpp | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index f61e4a10892e..bcbcfd3dc290 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1393,6 +1393,9 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
>   		availableParamBuffers_.push(request->paramBuffer);
>   		availableStatBuffers_.push(request->statBuffer);
>   
> +		/* Return RAW buffer to the CIO2. */
> +		cio2_.tryReturnBuffer(buffer);
> +
>   		pipe()->completeRequest(request->_o<Request>());
>   		return;
>   	}

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index f61e4a10892e..bcbcfd3dc290 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -1393,6 +1393,9 @@  void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
 		availableParamBuffers_.push(request->paramBuffer);
 		availableStatBuffers_.push(request->statBuffer);
 
+		/* Return RAW buffer to the CIO2. */
+		cio2_.tryReturnBuffer(buffer);
+
 		pipe()->completeRequest(request->_o<Request>());
 		return;
 	}