Leopard hawk camera (dual sensor) can't capture from both sensors simulataneously

I have a Jetson Orin with two MAX96724 deserializers attached and accessible via i2c-2. Attached to the first GMSL port of the MAX96724 is a Leopard Hawk steroscopic camera (containing two OnSemi ar0234 sensors). Using the nv_ar0234 driver I have been able to configure the max96724, the MAX9295D in the camera and both the sensors. Due to a design decision, the CSI2 interfaces on the MAX96724 are configured for 2x4 mode, and the sensors are mapped to virtual channels 0 and 1. I can capture from either sensor on the hawk using v4l2-ctl and nvargus_nvraw individually, but when I try to capture from both at the same time I start seeing decode errors in the kernel log, and if I capture anything, it is corrupted.

The commands I’m using right now to capture from both sensors are `v4l2-ctl -d /dev/video1 --set-fmt-video=width=1920,height=1200 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=100 --stream-to=video1.raw & v4l2-ctl -d /dev/video0 --set-
fmt-video=width=1920,height=1200 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=100 --stream-to=video0.raw &`

Using a different camera and driver, we have successfully connected and captured from 8 cameras so we know that the system can work.

Our controller is running JetPack 6. It seems like this could be a problem with our overlay for the cameras, so I am attaching the overlay source and the dmesg output while running the capture command.

eagle-camera-overlay-ar0234.dts.txt (13.5 KB)

dmesg-concurrent-capture.log (12.6 KB)

Hello @jeff.hildebrand,

Can you try the following scenarios?

  1. What happens if you start capturing with one camera, then start the second capture mid camera 1 stream. What is the result for the camera that was successfully capturing and what happens with the one that just started capturing?

  2. Do the same but with switching the camera that captures first and the one that joins later.

best,
Andrew
Embedded Software Engineer at ProventusNova

Suppose in current NVCSI/VI driver would NOT support the camera connect to the same CSI port via virtual channel for two cameras.

If you need using v4l2-clt and argus simultaneously you may have another camera connect to another CSI port like CSI-2(CSI-C)

Thanks

Thanks

To be clear, we performed tests using either v4l2-ctl or nvargus_nvraw, but not at the same time. When using nvargus_nvraw we captured a single frame using the command nvargus_nvraw --c 1 --mode 0 --file ./auto2.jpg --format jpg --skipframes 20, and a similar command to capture from sensor ID 0. In a separate test, we used v4l2-ctl to capture multiple frames from each sensor. We do not mix and match using v4l2-ctl and nvargus_nvraw.

I’m surprised that you would claim that the nvcsi/vi drivers do not support receiving multiple sensor streams over the same CSI interface using different virtual channels. We have another camera that has only a single sensor, and we can run 4 of these concurrently, attached to the max96724 and connected to the AGX Orin with the CSIs configured in 2x4 mode, and the some of those censors have their streams remapped to use VC=1 so that two streams can be sent over each 4-lane CSI interface. This is what is stumping us - we see this working on with our other cameras, but not with the Hawk cameras, and we don’t understand why.

Thanks Andrew.

We performed these tests, and here’s what we found:

  • start first sensor, good frames are captured
  • start second sensor, second sensor captures mostly black frames
  • first sensor begins getting captured frames, still recognizable but with noise
  • stop second sensor
  • first sensor continues to get noise

It doesn’t matter which of the two sensors we start first, the results are the same.

That’s is confuse how does single camera run 4 of it?

My apologies if I explained this poorly. We have cameras that contain a single imaging sensor (just like most cameras) and connect to our controller via a GMSL2 cable. The MAX96724 has 4 GMSL inputs and 2 CSI2 outputs. Those CSI2 interfaces are configured as 2x4 (two PHYs each with 4 lanes). We can capture from all 4 cameras concurrently and so with 4 input streams and only 2 output interfaces, we must be multiplexing video data over the CSIs. I can confirm that by inspecting the configuration that is programmed into the MAX96724 that the two of the cameras have their virtual channel remapped from 0 to 1 before they are muxed together at the PHY controller.

Could you consult with Leopard for further support.

Thanks