USB and CSI cameras capture issues

Hello,

I’ve been trying to use both CSI (Raspberry Pi camera v2, imx219 sensor) and USB (Intel Realsense D435) cameras at once with the Jetson Nano board, with mixed results. If I boot the Nano up with both cameras attached and try to get the CSI camera video feed with

gst-launch

, I get the following errors:

$ gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 266)
(Argus) Error EndOfFile: Receive worker failure, notifying 1 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 340)
(Argus) Error EndOfFile: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
(Argus) Error InvalidState: Argus client is exiting with 1 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 357)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 368)
(Argus) Error EndOfFile:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 87)
(Argus) Error InvalidState: Receive thread is not running cannot send. (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 96)
(Argus) Error InvalidState:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 87)
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:515 Failed to create CameraProvider

If I unplug the Realsense camera and re-run the command, the video stream starts just fine. The stream doesn’t stop when I replug the Realsense camera, and I’m able to get the RGB and depth streams from the Realsense as well. If I then stop the CSI camera stream and try to restart it again (with the Realsense still plugged in), I’ll get the same errors and the stream won’t come up.

Still, unplugging and replugging the USB camera to get both of them working is inconvenient. Is there a way to use both cameras without unplugging and replugging one of them?

Hi sfalexrog,
This is a known limitation in libArgus (connecting USB camera and CSI camera simultaneously.)
The reason is when we connect a USB camera, a new device node is generated and this is not a libArgus compliant devnode.

Kindly check this Thread link for more details:
https://devtalk.nvidia.com/default/topic/1059115/jetson-tx2/nvargus-daemon-crash-on-simultaneous-use-of-argus-camera-and-usb-camera/post/5372656/#5372656

Hi all
Please replace the attached lib to check.
Rename it to libnvodm_imager.so and copy to /usr/lib/aarch64-linux-gnu/tegra/libnvodm_imager.so

libnvodm_imager_tx1.txt ---- r28.2.1
libnvodm_imager_tx1.txt (4.97 MB)
libnvodm_imager_tx1_r32.1.txt (5.04 MB)

For TX1 r28.2/28.2.1 also need replace /usr/lib/aarch64-linux-gnu/tegra/libargus.so
libargus_tx1_28.2.txt (684 KB)

Replaced libnvodm_imager_tx1 and it did the trick! Thank you!