Frame rate drop during single node capture

Hi,
We want to have 3 cameras in tx2.
The resolution of these cameras are:
camera1: 736x288, frame rate(fr)=50
camera2: 1920x1080, fr=25
camera3: 1920x1080, fr=50
and the “pixel type” for all node is set to “bayer_rggb”.
There is no frame rate drop when capturing from all or two cameras. But when only one camera captures, we have a drop in frame rate (About half).
According to the link “Considerable Frame rate drops with dual camera”, the maximum values for clk were set, and changed the “pix-clk-hz” for all cameras, but this problem still remains only for camera3.
We did not experience this problem when “pixel type” is “YUV”.
Can you suggest, how to fix this?
Currently we are using JetPack-4.4.1 on TX2.

hello kamelkhaan,

please refer to developer guide, Applications Using V4L2 IOCTL Directly.
you may use V4L2 IOCTL to verify basic camera functionality, it’ll also report average frame-rate below the command-line for every second.
thanks

Hi JerryChang,
Thanks for your attention.
We use “v4l2-ctl -d /dev/video2 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=200” and have 50fps, but we get 25fps with “gst-launch-1.0 -e nvarguscamerasrc sensor-id=2 ! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)50/1’ ! nvv4l2h265enc bitrate=8000000 ! h265parse ! qtmux ! filesink location=vid1080.mp4 -e”.
We want to capture with gst-launch. How to resolve this problem.

hello kamelkhaan,

please have a further confirmation,
could you please disable preview and shows frame-rate only with gstreamer pipeline,
for example,
$ gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=50/1, format=NV12' ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 -v

Hello JerryChang,
Thanks for your reply.
We use this pipeline gst-launch-1.0 nvarguscamerasrc sensor-id=2 ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=50/1, format=NV12' ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 -v and get this result.

/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 105, dropped: 0, current: 25.01, average: 25.35
The FR is 25 fps.

hello kamelkhaan,

sensor-id=2 not always mapping to /dev/video2,

so,
could you please have a quick confirmation by changing sensor-id as other index.
thanks

Thanks for your help,
We changed the sensor-id and have the same result. It seems that sensor-id=2 is mapped on /dev/video2.

hello kamelkhaan,

could you please share the VIDIOC_ENUM_FMT for your video device.
for example, $ v4l2-ctl -d /dev/video2 --list-formats-ext

For /dev/video2 that has frame rate drop

nvidia@10:~$ v4l2-ctl -d /dev/video2 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: ‘RG10’
Name : 10-bit Bayer RGRG/GBGB
Size: Discrete 1920x1080
Interval: Discrete 0.020s (50.000 fps)

two other nodes

nvidia@10:~$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: ‘RG10’
Name : 10-bit Bayer RGRG/GBGB
Size: Discrete 736x288
Interval: Discrete 0.020s (50.000 fps)

nvidia@10:~$ v4l2-ctl -d /dev/video1 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: ‘RG10’
Name : 10-bit Bayer RGRG/GBGB
Size: Discrete 1920x1080
Interval: Discrete 0.040s (25.000 fps)

thanks.

hello kamelkhaan,

could you please install MMAPI and enable argus_camera application to verify the frame-rate?
the default path as following, /home/nvidia/jetson_multimedia_api/argus/
please check README.TXT for the steps to build the samples and apps.
thanks

Hello JerryChang,
When we capture only from a node (1920x1080 50fps, /dev/video2), we get 25fps and have drop in frame rate. At the same time we start to capture from another node (1920x1080 25fps or 736x288 50fps), we get 50 fps from /dev/video2 and the frame rate is correct. Our problem is: Frame rate drop during single node capture.
thanks

hello kamelkhaan,

it seems to me a clock issue here; could you please also review the board schematic for these cameras.
for example, do you have other camera sharing the clock?
you may also probe the clock rates to compare the signaling between full frame-rate and half frame-rate.
thanks

Hello JerryChang,
thanks for your reply,
We check this and give you the result.

Hello JerryChang,
We checked these.

  1. The /dev/video2 (1920x1080@50) is captured and we get 25fps for 1920x1080.
  2. The /dev/video2 (1920x1080@50) and /dev/video0 (736x288@50) are captured and we get 50fps for 1920x1080 and 50 fps for 736x288.
    In both tests the clock did not change.

hello kamelkhaan,

could you please share results with v4l2 standard controls. it’ll report the frame-rate below the pipeline,
for example,
$ v4l2-ctl -d /dev/video2 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=100

Hello JerryChang,
thanks for your reply,
the result of this pipeline is 50 fps, but we want to get 50fps when capture with gst-launch.

hello kamelkhaan,

please execute $ argus_camera --kpi to enable kpi mode for checking.
you’ll see performance tracker to report frame-rate as following,
PerfTracker 1: frameRate 30.08 frames per second at 3 Seconds
thanks

hello JerryChang
We do not understand what you mean.
Please give an example .
we get this message: “argus_camera: command not found”

hello kamelkhaan,

you may refer to Camera Architecture Stack, it’s libargus to operate camera drivers based-on the camera core stack.
for example, it’s MMAPI package, if you install it you’ll see public sources as following, /usr/src/jetson_multimedia_api/
please check Argus/README.TXT for the steps to build and install the argus_camera sample application.
in addition, here’s Jetson Linux API Reference for the MMAPI documentation.
thanks

hello JerryChang,
apologize for the delay.
If only execute $ argus_camera -d 2 --kpi

if I captuer from another node and then execute $ argus_camera -d 2 --kpi