[libcamera-devel] [PATCH v4 5/8] libcamera: pipeline: rkisp1: Do not try to process cancelled frames

Niklas Söderlund niklas.soderlund at ragnatech.se
Mon Apr 13 23:26:57 CEST 2020


There is no need to try and process cancelled frames, try to finish as
quickly as possible.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
* Changes since v2
- If the buffer intended for the application is canceled complete it and
  the request as to not lockup applications.
---
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index c4e46bea1cc9a47f..c7068c0c285f3775 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -1033,6 +1033,12 @@ void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
 	RkISP1CameraData *data = cameraData(activeCamera_);
 	Request *request = buffer->request();
 
+	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
+		completeBuffer(activeCamera_, request, buffer);
+		completeRequest(activeCamera_, request);
+		return;
+	}
+
 	data->timeline_.bufferReady(buffer);
 
 	if (data->frame_ <= buffer->metadata().sequence)
@@ -1044,6 +1050,9 @@ void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
 
 void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)
 {
+	if (buffer->metadata().status == FrameMetadata::FrameCancelled)
+		return;
+
 	ASSERT(activeCamera_);
 	RkISP1CameraData *data = cameraData(activeCamera_);
 
@@ -1055,6 +1064,9 @@ void PipelineHandlerRkISP1::paramReady(FrameBuffer *buffer)
 
 void PipelineHandlerRkISP1::statReady(FrameBuffer *buffer)
 {
+	if (buffer->metadata().status == FrameMetadata::FrameCancelled)
+		return;
+
 	ASSERT(activeCamera_);
 	RkISP1CameraData *data = cameraData(activeCamera_);
 
-- 
2.26.0



More information about the libcamera-devel mailing list