I’m new to the Jetson Nano community. I work in a research lab and we are trying to build a high speed image acquisition system using the Jetson Nano. We are trying to use the IMX219 Raspberry Pi v2 camera and trying to record videos of about 100fps-120fps in RAW format.
I was wondering if:
[1] Is it possible to hit 120fps? I read recently that the new version of Jetpack disabled 120fps support for the IMX219 sensor?
[2] If it is possible, what would be the best way to do it? I’ve dived into Gstreamer to figure it out and I have come up with this command:
to hopefully be able to capture 600 frames at 120fps. I was wondering if this is the correct way to do it?
Also, are there any useful pointers I should take note off to further optimize this pipeline? I have heard people suggesting to save these RAW videos directly into an external drive instead of the root file system. I was wondering if there were some other considerations I should take note of.
Not sure, and it may depend on what is the additional CPU load.
IIRC, using 120 fps with Xavier NX on recent L4T releases, Argus was using one full CPU core (Note that these build instructions may no longer be correct with restriction with local-version to be -tegra-xxx for nvidia drivers modules).
If you can build driver for 120 fps and if it works with Argus, your pipeline is ok (note that nvvidconv flip-method is 0 by default).
If it doesn’t fit, you may record raw bayer RG10 from V4L, and use offline converting into another format
Thank you for your reply. I had a couple of follow up questions I was hoping you could help with:
[1] Some of the pipeline commands I have seen online involved specifying a format such as:
gst-launch-1.0 nvarguscamerasrc sensor_id=0 num-buffers=600 ! ‘video/x-raw(memory:NVMM), width=1280, height=720, framerate=120/1 format = I420’ ! nvvidconv flip method=0 ! ‘video/x-raw, width=1280, height=720 ! filesink location=test.raw
In my command, I do not specify a format. My intention is to record 10 bit RAW bayer (which is outputted from the Raspberry Pi V2 camera IMX219). To do this, i simply name my file with the .raw extension and specify video/x-raw. Will this get me the 10 bit raw bayer image?
[2] Is there a way to analyze the .raw video I obtain from the pipeline command above. Is there some way to print out how many frames there are, the exposure time, the timestamps of each frame? I want to have some verification that there are indeed 600 frames, the frame rate was 120fps and the frames were not being dropped.
Thank you for your response. I will try this command as mentioned: v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1 --stream-to=ov1080.raw
A couple of follow up questions:
[1] Is there a way to specify a frame rate in the above command? I know 120fps has stability issues but could I specify a frame rate of e.g. 100fps? If so, how would I do that?
[2] Is there going to be a performance decrease in using v4l2-ctl versus nvarguscamerasrc? As I am new to this platform, I am trying to understand these different commands and how they would affect performance speeds?
An update to my question [1] above –
I am running this command: v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 && v4l2-ctl --set-parm=100 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=600 --stream-to=ov1080.raw and I am only getting about 21fps. If I set the fps to a lower amount like 8, i.e set_parm=8, it still goes to 21fps. How should I specify the fps I need?