Using libargus on TX2 (R28.2.1) when we have a mix of MIPI CSI cameras

We have encountered a problem using libargus that we did not expect to see. We have two imx274 color cameras working in our own application using the argus library. We are using a TX2 running 28.2.1.

We have recently added a third thermal camera, using a TC358746 bridge chip to interface it with the Jetson TX2. We have added our own driver based on IMX185 example. (Before you ask, camera binds correctly without errors according to media-ctl and v4l2-compliance). We can capture, process and display video from the new camera using the v4l2 library. We are having no trouble with this camera.

However, our imx274 application which has been running fine for months now, no longer works. The “camera provider” part of libargus has a conniption and refuses to run, even when we unplug the new camera. We can access the raw video from the original IMX274 cameras using v4l2-ctrl, so they are still fine. Argus_camera also refuses to run on either of the imx274 cameras. After looking into similar problems on the forum, we set this camera up to have a pixel type of SRGGB8, even though it is actually a RAW8. This should keep it compatible with the format limitations of the tegra multimedia suite. However, that did not change libargus behavior.

The simplest solution for us would be to tell libargus and its camera provider to ignore this new camera. So… is there a way to tell libargus to ignore a camera, perhaps through the override file or some other configuration file? We hope it can be something simple like this, as we have a tight delivery deadline.

Thanks for your help.

From our applications when try to start camera provider…

(NvOdmDevice) Error ModuleNotPresent: V4L2Device not available (in dvs/git/dirty/git-master_linux/camera-partner/imager/src/V4L2Device.cpp, function findDevice(), line 245)
(NvOdmDevice) Error ModuleNotPresent: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/V4L2Device.cpp, function initialize(), line 55)
(NvOdmDevice) Error ModuleNotPresent: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function initialize(), line 103)
NvPclDriverInitializeData: Unable to initialize driver v4l2_sensor
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclStateControllerOpen: Failed ImagerGUID 0. (error 0xA000E)
NvPclOpen: PCL Open Failed. Error: 0xf
SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 598)
SCF: Error BadParameter: (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 781)
SCF: Error BadParameter: (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 276)
SCF: Error BadParameter: (propagating from src/api/CameraDriver.cpp, function getSource(), line 439)
(Argus) Error BadParameter: (propagating from src/api/CameraProviderImpl.cpp, function initialize(), line 92)
(Argus) Error BadParameter: (propagating from src/api/GlobalProcessState.cpp, function createCameraProvider(), line 214)
Error: Failure to acquire interface to camera provider

From argus_camera…

argus_camera --device=0
Executing Argus Sample Application (argus_camera)
Argus Version: UNKNOWN
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:850 No cameras available
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, Dispatcher:803 (propagating)
(NvCameraUtils) Error InvalidState: Mutex already initialized (in Mutex.cpp, function initialize(), line 41)
(Argus) Error InvalidState: (propagating from src/rpc/socket/client/ClientSocketManager.cpp, function open(), line 54)
(Argus) Error InvalidState: (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 205)
(Argus) Error InvalidState: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 129)
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 214)
(Argus) Error EndOfFile: Receive worker failure, notifying 1 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 289)
(Argus) Error EndOfFile: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 149)
(Argus) Error EndOfFile: (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 101)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 317)
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:842 Failed to create CameraProvider
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:826 Initalization failed
(Argus) Error FileOperationFailed: Connecting to argus_daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 190)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 129)
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:842 Failed to create CameraProvider
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:826 Initalization failed
(Argus) Error FileOperationFailed: Connecting to argus_daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 190)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 129)
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:842 Failed to create CameraProvider
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:826 Initalization failed
(Argus) Error FileOperationFailed: Connecting to argus_daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 190)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 129)
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:842 Failed to create CameraProvider
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:826 Initalization failed
(Argus) Error FileOperationFailed: Connecting to argus_daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 190)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 129)
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:842 Failed to create CameraProvider
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:826 Initalization failed
(Argus) Error FileOperationFailed: Connecting to argus_daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 190)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 129)
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:842 Failed to create CameraProvider
Error generated. /home/nvidia/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:826 Initalization failed
terminate called after throwing an instance of ‘std::logic_error’
what(): basic_string::_M_construct null not valid
Aborted (core dumped)

Do not add the tc358840 to the tegra-camera-platform.

That does the trick - Thank-you. All three cameras are working now.