[RFC,v1,06/27] libcamera: pipeline: Replace open-coded buffer cancellation
diff mbox series

Message ID 20260618123844.656396-7-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • Misc. changes before request-buffer split
Related show

Commit Message

Barnabás Pőcze June 18, 2026, 12:38 p.m. UTC
Use `PipelineHander::cancelRequest()` instead of manually cancelling, completing
each buffer, then completing the request. This has the same behaviour unless
the request has no pending buffers.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/libcamera/pipeline/ipu3/ipu3.cpp             | 14 ++------------
 .../pipeline/rpi/common/pipeline_base.cpp        | 16 +---------------
 src/libcamera/pipeline/vimc/vimc.cpp             |  7 +------
 3 files changed, 4 insertions(+), 33 deletions(-)

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index bf4c2921f2..560fccd8c0 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -790,12 +790,7 @@  void IPU3CameraData::cancelPendingRequests()
 	while (!pendingRequests_.empty()) {
 		Request *request = pendingRequests_.front();
 
-		for (const auto &[stream, buffer] : request->buffers()) {
-			buffer->_d()->cancel();
-			pipe()->completeBuffer(request, buffer);
-		}
-
-		pipe()->completeRequest(request);
+		pipe()->cancelRequest(request);
 		pendingRequests_.pop();
 	}
 }
@@ -1299,13 +1294,8 @@  void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
 
 	/* If the buffer is cancelled force a complete of the whole request. */
 	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
-		for (const auto &[stream, b] : request->buffers()) {
-			b->_d()->cancel();
-			pipe()->completeBuffer(request, b);
-		}
-
 		frameInfos_.remove(info);
-		pipe()->completeRequest(request);
+		pipe()->cancelRequest(request);
 		return;
 	}
 
diff --git a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
index 5a5acf6a16..6a6be5c820 100644
--- a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
+++ b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
@@ -1401,21 +1401,7 @@  void CameraData::clearIncompleteRequests()
 	 * back to the application.
 	 */
 	while (!requestQueue_.empty()) {
-		Request *request = requestQueue_.front();
-
-		for (auto &b : request->buffers()) {
-			FrameBuffer *buffer = b.second;
-			/*
-			 * Has the buffer already been handed back to the
-			 * request? If not, do so now.
-			 */
-			if (buffer->request()) {
-				buffer->_d()->cancel();
-				pipe()->completeBuffer(request, buffer);
-			}
-		}
-
-		pipe()->completeRequest(request);
+		pipe()->cancelRequest(requestQueue_.front());
 		requestQueue_.pop();
 	}
 }
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 6681c74ee5..3d010d80e5 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -605,12 +605,7 @@  void VimcCameraData::imageBufferReady(FrameBuffer *buffer)
 
 	/* If the buffer is cancelled force a complete of the whole request. */
 	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
-		for (const auto &[stream, b] : request->buffers()) {
-			b->_d()->cancel();
-			pipe->completeBuffer(request, b);
-		}
-
-		pipe->completeRequest(request);
+		pipe->cancelRequest(request);
 		return;
 	}