Environment
• Hardware Platform (Jetson / GPU)
Jetson Orin NX
• DeepStream Version
DeepStream 6.1
• JetPack Version (valid for Jetson only)
Host: 5.1.1-b56
Docker: 5.0.2-b231
• TensorRT Version
Host: 8.4.1.5
Docker: 8.5.2.2
• Issue Type( questions, new requirements, bugs)
Question
I have been testing with two different usb cameras and I find that MJPG framerate is lower than what they claim during negotiation.
Each is connected to their own Jetson Orin NX via USB2.0 with identical setup.
Camera A:
OV2643
v4l2-ctl --list-formats-ext
[0]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x1024
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
[1]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x1024
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Camera B :
See3CAM_24CUG
v4l2-ctl --list-formats-ext
[0]: 'UYVY' (UYVY 4:2:2)
Size: Discrete 1280x720
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 1920x1200
Interval: Discrete 0.167s (6.000 fps)
[1]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x720
Interval: Discrete 0.008s (120.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.008s (120.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1200
Interval: Discrete 0.009s (114.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Camera A using YUYV:
Is cheaper and seems to be promising unrealistic YUYV capabilites.
gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=1024,framerate=30/1 ! queue ! fpsdisplaysink video-sink=fakesink --verbose
gst-launch-1.0 -e nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM)",width=1280,height=1024,framerate=30/1 ! queue ! fpsdispla ysink video-sink=fakesink --verbose
Both these pipes yield an fps of only 7.5 out of 30.
The usbtop
tool shows that 20Mb/s of data is passing through the USB2.0.
I think it is safe to assume that 30 fps would not be attainable here anyway and I’m fine with that.
Camera B using UYVY:
This camera is more expensive and is promising plausible capabilities.
gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080,framerate=8/1 ! queue ! fpsdisplaysink video-sink=fakesink --verbose
gst-launch-1.0 -e nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM)",width=1920,height=1080,framerate=8/1 ! queue ! fpsdisplaysink video-sink=fakesink --verbose
Both these pipelines show the expected fps of 8. I’m happy about that.
usbtop
shows that 40Mb/s of data is passing through the USB2.0.
This is probably approaching the max of what one can consistently expect from a video stream through USB2.
Camera A using MJPG:
gst-launch-1.0 -e v4l2src device=/dev/video0 io-mode=2 ! image/jpeg,width=1280,height=1024,framerate=30/1 ! queue ! fpsdisplaysink video-sink=fakesink --verbose
This pipe yields an fps of 15 out of the promised 30.
usbtop
shows only 1.5Mb/s of data flowing, so there should be plenty to spare to get the full fps.
Camera B using MJPG:
gst-launch-1.0 -e v4l2src device=/dev/video0 io-mode=2 ! image/jpeg,width=1920,height=1080,framerate=120/1 ! queue ! fpsdisplaysink video-sink=fakesink --verbose
This pipe yields an fps of 94 out of the promised 120.
usbtop
shows 18Mb/s of data flow, so there should be some to spare for the remaining fps.
Does anybody have any thoughts on the low fps when using MJPG?