How to increase frame rate when using multiple CSI cameras


I am using 4 IMX390 camera from leopard imaging. When I open 4 cameras, the delay will be like 500 ms and the frame rate will drop to 10 fps.
I use VideoCapture cap0(“nvarguscamerasrc sensor-id=0 maxperf=true ! video/x-raw(memory:NVMM), width=1920, height=1080,format=NV12, framerate=30/1 ! nvvidconv ! queue ! video/x-raw,format=I420 ! appsink”) to open cameras.
Can anyone give me some helps?

Did you boost the system to try.

sudo nvpmodel -m 0
sudo jetson_closks

Thank you for you reply.
I was in MAXN mode before, but didn’t use jetson_clocks.
I followed your suggestions. The frame rate did improve a little But still, frame rate was about 20 fps, not 30 fps.

And I also try to use egl_display to get video input. The result in console showed I opened the camera, but there was no window pop out.

Have a try gst-launch-1.0 with ximagesink

export DISPLAY=:0
gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1280, height=720, framerate=30/1, format=NV12' ! nvvidconv ! ximagesink -e

Thx! I tried to open 4 cameras with xvimagesink using .sh file. All of them can achieve 30 fps.
But I need to grab frames from live stream for further processing, which means I need to use opencv. Can I also do by using xvimagesink, or I can only use appsink?

Try below pipeline.

VideoCapture cap0("nvarguscamerasrc sensor-id=0 maxperf=true ! video/x-raw(memory:NVMM), width=1920, height=1080, framerate=30/1 ! nvvidconv ! video/x-raw,format=I420 ! appsink")

I tried this pipeline. The performance remained the same. I used maxperf=true in former code.
I also added sync=false at the end. But the frame rate didn’t improve

It could be the post process after the appsink. Does anything to do after this pipeline?

I only use OpenCV to convert color space

cap0 >> frame0;
cap1 >> frame1;
cap2 >> frame2;
cap3 >> frame3;
cvtColor(frame0, frame0, CV_YUV2BGR_I420);
cvtColor(frame1, frame1, CV_YUV2BGR_I420);
cvtColor(frame2, frame2, CV_YUV2BGR_I420);
cvtColor(frame3, frame3, CV_YUV2BGR_I420);
imshow("original0", frame0);
imshow("original1", frame1);
imshow("original2", frame2);
imshow("original3", frame3);

Have a check use nvvidconv to convert to RGB like below to check.

Thanks! And I also downsize the displayed image. The frame rate can reach 30 fps now.

Thank you for your kind reply