Get raw input from CSI interface

We have a device that’s connected to the CSI port on a Jetson Nano eMMC. We’re using the IMX219 driver to get the images from the CSI interface … but it seems as though the driver is applying gain settings to the image, possibly variably - it’s an interesting halo effect, with the center of the halo in the middle of the image. We’ve used a Keysight analyzer to verify that the images that are being transferred to the CSI port are 100% the way we want … but after going through the driver the halo makes the image unusable.

We would like to simply get the raw images from the interface. Is there any way to do this?

Thank you -

You can get raw frames from V4L API, but IMX219 is a bayer sensor, so you would get bayer RG10 format (10 bits values being saved as 16 bits values):

# Capture one frame 
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1 -d /dev/video0 --stream-to=imx219.RG10

However, I can’tell any RG10 viewer. You would have to debayer yourself for getting a YUV or RGB format and further process frames.
Gstreamer can only handle 8 bits bayer formats, so years ago I did a quick and dirty attempt to offline convert into bayer 8 bits (this one was from BG10 to bggr, but same may be used for RG10 to rggb) that can be processed by gstreamer (you may read the TRM for Nano and your L4T release for right pixel format in order to make it clean).

It might be easier to keep Argus for debayering but remove ISP config. Try moving file /var/nvidia/nvcam/settings/camera_overrides.isp into another directory and restart argus or reboot.

1 Like