Issue with recording 3 USB cameras and usb root

I have a Jetson AGX Orin dev kit with the latest jetpack

R36 (release), REVISION: 4.4, GCID: 41062509, BOARD: generic, EABI: aarch64, DATE: Mon Jun 16 16:07:13 UTC 2025

KERNEL_VARIANT: oot

TARGET_USERSPACE_LIB_DIR=nvidia
TARGET_USERSPACE_LIB_DIR_PATH=usr/lib/aarch64-linux-gnu/nvidia

I am trying to record 3 USB cameras with resolution of 640x480 at 30 fps.
when streaming it works fine, but when recording the fps goes down to about ~23 fps.

I know that all USB type A ports are on the same hub , so Itried connecting one camera on a port type A, another on port type C and the third on the second type C.
That’s when I noticed that all the type A and the type C are on the same root hub which is 480M.
there is a second root hub (10000M), but none of of the ports seem to connect to it.
It looks to me like all ports lead to a single usb2.0 hub, which is strange.

Here is the log of me connecting a single camera to each of the ports (4 type A and 2 type C):

Type A
(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 7, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 7, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 1: Dev 4, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
Type A
(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 4, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 8, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 4: Dev 8, If 1, Class=Video, Driver=uvcvideo, 480M
Type A
(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 4, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 1: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 9, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 2: Dev 9, If 1, Class=Video, Driver=uvcvideo, 480M
Type A
(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 10, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 1: Dev 10, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 2: Dev 11, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 1, Class=Human Interface Device, Driver=usbhid, 12M
type C
(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 2: Dev 12, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 2: Dev 12, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 11, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 1, Class=Human Interface Device, Driver=usbhid, 12M
type C
(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 1: Dev 13, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 1: Dev 13, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 11, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 11, If 1, Class=Human Interface Device, Driver=usbhid, 12M

it looks like
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
is never used.

I am trying to understand if I am missing something here. I would appreciate any assistance
My goal is to be able to record 3 usb cameras with resolution of 640x480 at 30 fps. which seems to me like should be possible in this device

Thanks!

Hi,
Do you use USB3 cameras? If either camera is USB2 camera, the bandwidth is 480Mbps instead of 5Gbps.

I have now. I have plugged a realsense 435 just to test. And indeed is shows up on the other bus.
Thanks!

(base) revol@ubuntu:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 10000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 10000M
|__ Port 4: Dev 7, If 0, Class=Video, Driver=uvcvideo, 5000M
|__ Port 4: Dev 7, If 1, Class=Video, Driver=uvcvideo, 5000M
|__ Port 4: Dev 7, If 2, Class=Video, Driver=uvcvideo, 5000M
|__ Port 4: Dev 7, If 3, Class=Video, Driver=uvcvideo, 5000M
|__ Port 4: Dev 7, If 4, Class=Video, Driver=uvcvideo, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 3: Dev 2, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 3: Dev 2, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 4, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 4, If 3, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 12M

So if I use 3 USB 2.0 cameras, I only have one root USB port for all? no matter which port I use, type A or type C. That is a bit disappointing

Hi,
Please check the total USB bandwidth on AGX Orin developer kit:
4 USB cameras using same USB Bus - #3 by DaneLLL

To achieve 5Gbps or 10Gbps, please use USB3 cameras.