[libcamera-devel] [PATCH v2 2/2] pipeline: raspberrypi: Improve Unicam timeout handling

Naushir Patuck naush at raspberrypi.com
Wed Sep 21 10:02:58 CEST 2022


Currently, if a Unicam timeout is signalled, the pipeline handler only raises
an error message. Update the error handling to put the pipeline handler in an
internal error state, disable all device streams, and return all outstanding
requests as cancelled. Any subsequent requests that come into the pipeline
handler will also be returned as cancelled.

Any further error handling (e.g. a reset with camera stop()/start()) is up to
the application to perform as it requires.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
 src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 5c8c89585200..dcd81650c32d 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -1823,6 +1823,17 @@ void RPiCameraData::unicamTimeout()
 	LOG(RPI, Error) << "Unicam has timed out!";
 	LOG(RPI, Error) << "Please check that your camera sensor connector is attached securely.";
 	LOG(RPI, Error) << "Alternatively, try another cable and/or sensor.";
+
+	state_ = RPiCameraData::State::Error;
+	/*
+	 * To allow the application to attempt a recovery from this timeout,
+	 * stop all devices streaming, and return any outstanding requests as
+	 * incomplete and cancelled.
+	 */
+	for (auto const stream : streams_)
+		stream->dev()->streamOff();
+
+	clearIncompleteRequests();
 }
 
 void RPiCameraData::unicamBufferDequeue(FrameBuffer *buffer)
-- 
2.25.1



More information about the libcamera-devel mailing list