Using nvarguscamerasrc prevents using v4l2-ctl


I am running L4T 35.3.1

I am facing an issue with my Jetson system. When I boot my device, I can capture raw frames with v4l2-ctl just fine. I can also capture frames using GStreamer and nvarguscamerasrc without any problem.

However, I have noticed that after using GStreamer with nvarguscamerasrc, I am no longer able to use v4l2-ctl with this camera.

For example, when doing in order:

  • v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=-1 --stream-to=- => Success
  • gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! fakesink dump=true => Success
  • v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=-1 --stream-to=- => FAILURE (the command hangs without any error message)

This issue happens consistently every time I run these commands in this order, a reboot allows v4l2-ctl to capture raw frames again.

I suspect that Argus is instructing the VI to direct the frames to the Argus pipeline, leaving v4l2-ctl unable to access the frames.

My question is: is there a way to revert this action and access the raw frames with v4l2-ctl after running GStreamer with nvarguscamerasrc?

Thanks !

Note that when using V4L for direct access to sensor without Argus, you may disable bypass (add --set-ctrl=bypass_mode=0 to your v4l2-ctl command), otherwise it might fool Argus.

Hey @Honey_Patouceul , thanks for your prompt answer.

Adding --set-ctrl=bypass_mode=0 to the v4l2-ctl command solved the issue. Could you explain me what this does or direct me to some documentation that does ?

I found this sentence in the Sensor Software Driver Programming Guide:

TEGRA_CAMERA_CID_VI_BYPASS_MODE† : A Boolean; true bypasses VI settings in the kernel driver. Default is true when using camera core library.

But I don´t really understand what it means,

Thanks !

I’m unable to point out at any documentation, someone from NVIDIA may provide more accurate data.

My understanding is that the camera driver may be used in two different ways;

  • By default, to be used by Argus, a bypass in the driver will make Argus able to get raw bayer frames from sensor driver into ISP for debayering, auto-tuning gains,exposure,wb,… and providing YUV (NV12) frames into NVMM memory for further processing with VIC, GPU, Video encoders or decoders…
    When using that mode, trying to acquire frames from V4L may lead to Argus being fooled.

  • If you want to get direct bayer frames from V4L API, don’t concurrently use same camera from Argus capture, and be sure to disable the bypass, so that Argus won’t receive any frame from your own V4L command.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.