Full resolution with Raspberry Pi HQ with Jetson Nano

So I am running on Jetpack 4.6.1, with L4T upgraded to 32.7.3, and I am running a single Raspberry Pi HQ IMX477.

When I run
nvargus_nvraw --lps
or
v4l2-ctl -d /dev/video0 --list-formats-ext

I am only seeing resolution modes up to 3840x2160, when I believe I should be able to capture the full resolution of the camera at ~4032x3040. I can run

gst-launch-1.0 -e nvarguscamerasrc num-buffers=1 sensor-id=0 ! “video/x-raw(memory:NVMM),width=4032,height=3040,framerate=30/1” ! nvjpegenc ! multifilesink location=test.jpeg

Which seemingly produces an image with 4032x3040 pixels according to the properties window, but unsure if that is accurate and its really just a 3840x2160 image.

Is 3840x2160 the maximum supported by the native jetpack/kernel driver for this camera? Do I need a third party driver or am I doing something wrong here?,

See related post here (created new topic since driver is a separate from original question/post): Raw image with RaspberryPi HQ IMX477 and Jetson Nano - #6 by jchaves)

I would ideally like to run with the nvargus_nvraw so I can control the exposure times and gain values.

hello alecy14,

please check reference driver, imx477_mode_tbls.h
there’re only two sensor mode available, re-cap as below.

static const struct camera_common_frmfmt imx477_frmfmt[] = {
        {{3840, 2160}, imx477_30_fr, 1, 0, IMX477_MODE_3840x2160_30FPS},
        {{1920, 1080}, imx477_60_fr, 1, 0, IMX477_MODE_1920x1080_60FPS},

Ok so you’re saying that those are the only native modes and I will need a third party driver.

Where can I find imx477_mode_tbls.h?

Hi,

If you are using the IMX477 device driver already distributed in the L4T sources then you should be able to find it at:

kernel/nvidia/drivers/media/i2c/imx477_mode_tbls.h

I downloaded the source code (from the provided link above) and I can see the maximum resolution that is supported is 3840x2160.

In general you could extend the IMX477 device driver provided in the L4T sources. It requires some kernel development to extend the modes table to support your resolution and also diving into the sensor datasheet to be able to figure out the required register configuration, but it is possible. There is extensive documentation provided by NVIDIA about camera driver development in the Sensor Programming Guide

Also as a final note, RidgeRun has wide experience in the development of kernel drivers, we can develop (or port) the new drivers for you. You can visit our main website or please email to support@ridgerun.com for technical questions and contactus@ridgerun.com for other queries.

Jafet Chaves,
Embedded SW Engineer at RidgeRun
Contact us: support@ridgerun.com
Developers wiki: https://developer.ridgerun.com/
Website: www.ridgerun.com

I was able to get the full resolution mode available by using the arducam driver and following the instructions here: Automatic installation script

However, I am still having trouble parsing out pixel data from the .raw file produced from:

nvargus_nvraw --c 0 --mode 0 --exp0 “0.000034,5.0” --file test.raw

Also I did notice that the v4l2-ctl utility is now hanging indefinitely when trying to take an image, but it does still recognize the sensor and the new capture mode

hello alecy14,

why don’t you contact with Jetson Camera Partners directly for adapting the drivers.

Hi,

I am not aware of your hardware setup but it could be possible that this Arducam driver you installed is intended to work with their MIPI camera modules. That could explain why the device driver is not working as intended for you.

I am able to produce the full resolution jpeg images using gstreamer and the nvraw utility, so I think those are operating ok. It seems there is some incompatibility with v4l2

I see, can you please shared the v4l2-ctl command that you are using? What do you mean that you are having trouble to parse the RAW file capture with nvraw? Have you tried using --format “raw”?

The issue I am having with the raw file is that I am unable to open it in any photo software to read it visually. Also, I would like to read the pixel by pixel data from the image, so what I mean is parsing out values for each pixel. Since when I load it into matlab it produces a 1-D array, Im not sure how to rearrange that data to figure out which values belong to which pixels.

As for the command:

Here is what I am running to see the available modes:

v4l2-ctl --list-formats-ext

ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: ‘RG10’
Name : 10-bit Bayer RGRG/GBGB
Size: Discrete 4032x3040
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 3840x2160
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)

Here’s what I am using to capture an image:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=4032,height=3040,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1 --stream-to=test_v4l2.raw

And the command hangs. When I run dmesg, I believe this is the following corresponding behavior until I cancel the command:

[84726.919897] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 0
[84726.953277] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 1
[84726.986656] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 2
[84727.020044] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 3
[84727.053326] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 4
[84727.086777] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 5
[84727.120244] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 6
[84727.154198] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 7
[84727.186668] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 8
[84727.220198] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 9
[84727.253521] vi 54080000.vi: tegra_channel_error_status:error 20022 frame 10

Does other resolution modes work with v4l2-ctl?

Using nvraw tool my guess is that the NVRAW format is not what you require. My recommendation is to try with --format “raw”. There is information about these formats here: Argus NvRaw Tool — Jetson Linux Developer Guide documentation

It looks like I am encountering the same issue as here: Can't manage to get it working with v4l2 · Issue #22 · RidgeRun/NVIDIA-Jetson-IMX477-RPIV3 · GitHub

with the v4l2 utility. I did try the lower resolution modes and encountering the same problem.

I have been using the format you suggested. Here is the command I am using for the raw capture with nvargus_nvraw:

nvargus_nvraw --c 0 --mode 0 --exp0 “0.000034,5.0” --file test_raw_headerless --format “raw”

And that produces a .raw,.nvraw, and .txt file successfully. I’ve tried reading both the .raw and .nvraw file

do you have a full path for imx477_mode_tbls.h? I searched for those folders and the file but cannot find them anywhere

Hi,

I was checking in detail the driver that you are currently using. By browsing and inspecting the installation procedure that you pointed out in this repo: Automatic installation script. I was able to find several things:

  • That script is outdated. It installs a older version of this device driver.
  • Having installed an older version of the driver means there is a mismatch between the JetPack release that you are using and the support of the device driver. This is in general not recommended.

My recommendation is to rebuild the IMX477 module for the JetPack version you are using (4.6.1). That requires to build the official BSP sources that can be downloaded here: Jetson Linux R32.7.1 Release Page | NVIDIA Developer. About your specific question of the imx477_mode_tbls.h file. That link provided previously will download a tarball called “public_sources.tbz2” that you can unpack. Once unpacked you can find the Linux kernel sources at: public_sources/Linux_for_Tegra/source/public/kernel_src.tbz2 and if you unpack that one kernel_src.tbz2 package you will find the file that you are looking for at: kernel_src/kernel/nvidia/drivers/media/i2c/imx477_mode_tbls.h

Just as an additional note. That IMX477 device driver was developed by RidgeRun in collaboration with NVIDIA, that is why it is shipped as part of the official Jetson Linux sources. The Arducam repo that you used actually uses an outdated set of patches of that same driver. That is why I recommend sticking with the official sources from NVIDIA instead.

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