Jetson Xavier NX: FPS mismatch between v4l2-ctl and GStreamer for GRAY8 camera – unable to reach expected FPS

Hello NVIDIA team,

I am using a Jetson Xavier NX with JetPack 5.1.3, streaming a monochrome (GRAY8) camera via V4L2. I am observing a significant FPS discrepancy between v4l2-ctl and GStreamer pipelines, and I am unable to reach the expected frame rate using GStreamer.

Board & Software Details

  • Platform: Jetson Xavier NX

  • JetPack: 5.1.3

  • Camera: Monochrome sensor

  • Pixel format: GRAY8

  • Resolution: 1920 × 1200

  • Device: /dev/video0

1. v4l2-ctl FPS Observation

Command used:

v4l2-ctl --set-fmt-video=width=1920,height=1200,pixelformat=GRAY \
         --stream-mmap --stream-count=1000 -d /dev/video0

Output:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 50.22 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 50.22 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 50.22 fps
...

Observations:

  • v4l2-ctl reports ~50.22 FPS

  • This indicates that the sensor + driver path is capable of ~50 FPS

2. GStreamer FPS Observation

Command used:

gst-launch-1.0 -v v4l2src device=/dev/video0 ! \
video/x-raw,format=GRAY8,width=1920,height=1200,framerate=30/1 ! \
videoconvert ! fpsdisplaysink text-overlay=true video-sink=autovideosink sync=false

Relevant FPS logs:

rendered: 14, dropped: 0, current: 26.67, average: 26.67
rendered: 40, dropped: 0, current: 28.86, average: 25.39
rendered: 69, dropped: 0, current: 27.74, average: 26.59
rendered: 99, dropped: 0, current: 29.74, average: 27.50
rendered: 131, dropped: 0, current: 31.17, average: 28.22
rendered: 148, dropped: 0, current: 32.21, average: 28.63

Observations:

  • GStreamer negotiates GRAY8 correctly

  • FPS stabilizes around 26–30 FPS

  • No frame drops reported

  • FPS does not reach the ~50 FPS seen with v4l2-ctl

Problem Summary

  • Sensor + driver can stream at ~50 FPS (via v4l2-ctl)

  • GStreamer pipeline is limited to ~30 FPS

  • Likely bottlenecks:

    • videoconvert using CPU

    • Lack of NVMM / VIC acceleration

Questions to NVIDIA Team

  1. Why does v4l2-ctl report ~50 FPS, but GStreamer is limited to ~30 FPS?

  2. Are there NVIDIA-optimized pipelines for monochrome (GRAY8) cameras on Xavier NX?

  3. Can nvvidconv / VIC be used with GRAY8, or is format conversion required?

  4. Are there hardware-accelerated encode/display paths for monochrome data?

  5. Is there a recommended GStreamer pipeline to reach the same FPS as v4l2-ctl?

  6. Any Jetson-specific performance tuning (clocks, memory, driver settings) recommended?

Goal

My goal is to:

  • Reach ~50 FPS in GStreamer, matching v4l2-ctl

  • Use NVIDIA hardware acceleration wherever possible

  • Avoid unnecessary CPU-based conversions for monochrome streams

Thank you for your guidance.

hello cookiecooker249,

please give it a try to convert to I420 first and then NV12; you may see-also sources of nvvidconv for more details.
here’re test pipelines for your reference,
$ gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=GRAY8,width=1280,height=720" ! nvvidconv ! "video/x-raw,format=GRAY8" ! queue ! videoconvert ! xvimagesink sync=false
or..
$ gst-launch-1.0 v4l2src ! video/x-raw,format=GRAY8,width=1920,height=1080,framerate=30/1 ! nvvidconv ! video/x-raw(memory:NVMM),format=I420 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 -v

Hi @JerryChang ,

The above command works as expected, providing the desired FPS, and matches the V4L2 FPS. Thank you!