• Hardware Platform (Jetson): Jetson Orin Nano 4GB prod, 8GB prod
• JetPack Version: JetPack 6.1 (r36.4.0)
• Issue Type (questions, new requirements, bugs): bug
We are experiencing failures using GMSL cameras with Argus API.
The issue manifests as a frame request timeout and failure to capture further camera frames after a length of time varying from few seconds after opening the device to several hours of successful operation.
The failure does not appear to be recoverable, as further attempts to capture frames result in the same error state.
This is an example of error logs during capture (please note our capture logic retries a few times after a timeout, so the same error is repeated):
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 4, capture sequence ID = 0 draining session frameStart events 3",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameStart(), line 529)",
SCF: Error InvalidState: Sensor GUID 4 is in error state. Skipping requests, capture sequence ID = 1 continue draining session frameStart events 2",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameStart(), line 543)",
SCF: Error InvalidState: Sensor GUID 4 is in error state. Skipping requests, capture sequence ID = 2 continue draining session frameStart events 1",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameStart(), line 543)",
SCF: Error InvalidState: Sensor 4 already in same state ",
(in src/services/capture/CaptureServiceDeviceSensor.cpp, function setErrorState(), line 100)",
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 4, capture sequence ID = 0 draining session frameEnd events 3",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 646)",
SCF: Error InvalidState: Sensor 4 already in same state ",
(in src/services/capture/CaptureServiceDeviceSensor.cpp, function setErrorState(), line 100)",
SCF: Error InvalidState: Sensor GUID 4 is in error state. Skipping requests, capture sequence ID = 3 continue draining session frameStart events 1",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameStart(), line 543)",
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 4, capture sequence ID = 1 draining session frameEnd events 4",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 646)",
SCF: Error InvalidState: Sensor 4 already in same state ",
(in src/services/capture/CaptureServiceDeviceSensor.cpp, function setErrorState(), line 100)",
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 4, capture sequence ID = 2 draining session frameEnd events 3",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 646)",
SCF: Error InvalidState: (propagating from src/services/capture/DeviceCaptureRequest.cpp, function notifyError(), line 128)",
SCF: Error InvalidState: Sensor GUID 4 is in error state. Skipping requests, capture sequence ID = 4 continue draining session frameStart events 1",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameStart(), line 543)",
SCF: Error InvalidState: (propagating from src/services/capture/CaptureRecord.cpp, function checkCaptureDone(), line 282)",
SCF: Error InvalidState: (propagating from src/services/capture/CaptureRecord.cpp, function csiFrameEnd(), line 266)",
SCF: Error InvalidState: (propagating from src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 687)",
SCF: Error InvalidState: Sensor 4 already in same state ",
(in src/services/capture/CaptureServiceDeviceSensor.cpp, function setErrorState(), line 100)",
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 4, capture sequence ID = 3 draining session frameEnd events 2",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 646)",
SCF: Error InvalidState: Sensor 4 already in same state ",
(in src/services/capture/CaptureServiceDeviceSensor.cpp, function setErrorState(), line 100)",
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 4, capture sequence ID = 4 draining session frameEnd events 1",
(in src/services/capture/FusaCaptureViCsiHw.cpp, function waitCsiFrameEnd(), line 646)",
SCF: Error Timeout: Sending critical error event for Session 4 ",
(in src/api/Session.cpp, function sendErrorEvent(), line 1039)",
SCF: Error BadParameter: CC has already been disposed (in src/components/CaptureContainerManager.cpp, function dispose(), line 161)",
SCF: Error Timeout: NvRmSyncWait failed (in src/api/Buffer.cpp, function cpuWaitFences(), line 622)",
SCF: Error Timeout: (propagating from src/api/Buffer.cpp, function cpuWaitInputFences(), line 543)",
SCF: Error Timeout: (propagating from src/api/Buffer.cpp, function acquire(), line 680)",
SCF: Error Timeout: (propagating from src/api/Buffer.cpp, function ScopedBufferLock(), line 657)",
Please also note that in our application we do not use the nvargus-daemon (we link against nvargus), but we are able to reproduce the issue with the nvargus-daemon too.
Furthermore, attempting to terminate the capture session (e.g. waitForIdle) results in further error logs and the Argus library hanging.
waitForIdleLocked remaining request 105 ",
waitForIdleLocked remaining request 104 ",
waitForIdleLocked remaining request 103 ",
SCF: Error Timeout: waitForIdle() timed out (in src/api/Session.cpp, function waitForIdleLocked(), line 969)",
waitForIdleLocked remaining request 105 ",
waitForIdleLocked remaining request 104 ",
waitForIdleLocked remaining request 103 ",
SCF: Error Timeout: waitForIdle() timed out (in src/api/Session.cpp, function waitForIdleLocked(), line 969)",
(Argus) Error Timeout: (propagating from src/api/CaptureSessionImpl.cpp, function waitForIdle(), line 729)",
SCF: Error InvalidState: 2 buffers still pending during EGLStreamProducer destruction (in src/services/gl/EGLStreamProducer.cpp, function freeBuffers(), line 300)",
SCF: Error InvalidState: 2 buffers still pending during EGLStreamProducer destruction (in src/services/gl/EGLStreamProducer.cpp, function freeBuffers(), line 300)",
waitForIdleLocked remaining request 105 ",
waitForIdleLocked remaining request 104 ",
waitForIdleLocked remaining request 103 ",
SCF: Error Timeout: waitForIdle() timed out (in src/api/Session.cpp, function waitForIdleLocked(), line 969)",
waitForIdleLocked remaining request 105 ",
waitForIdleLocked remaining request 104 ",
waitForIdleLocked remaining request 103 ",
SCF: Error Timeout: waitForIdle() timed out (in src/api/Session.cpp, function waitForIdleLocked(), line 969)",
The frequency of the issue is occasional: we roughly experience it1 every 100 runs, but this is a critical failure as our application requires continuous camera operation for hours or days at a time.
We use Leopard Imaging Hawk stereo camera LI-AR0234CS-STEREO-GMSL2-30 with a custom carrier board and a MAX9296A deserializer, if that’s useful.
Furthermore, a code sample showing the way we typically access the camera data using Argus API can be found at Argus camera usage sample · GitHub .
We have searched the forum for similar issues and while we found several instances of matching errors, we couldn’t find resolution. In some forum threads, it was mentioned:
- Argus daemon infinite timeout.
- Maxing and locking the rate of
vi,isp,nvcsiandemcclocks
however with no explanation of the root cause of the issues and why these solutions could help.
Our main questions are:
- How to proceed further to investigate and resolve these issues? Argus source code is not available, so we are not able to dig deeper into the root cause and understand whether the issue originates from camera hardware, carrier board, power/clock management, API misuse, or else.
- If this issue is not currently avoidable, how to recover from it? We have tried approaches like entirely re-creating the camera capture stack or the process, or reloading the kernel drivers, but without success: it seems that the only way to recover from this error state is to reboot, which isn’t a viable solution for us.