Hello
We are having some issues with dual capture using a Xavier AGX on JP 5.0.2.
The setup is:
-
2k cameras at 20fps, 12bit pixels and 4 lanes
-
One deserializer board
-
Xavier AGX devkit
We are migrating from JP 4.6.1 to JP 5.0.2. We modified the serdes_clk on dev-tree to match the new spec, and one camera works fine, no artifacts or errors on the video. Same as if we test each camera individualy, the stream works fine as long as there is only one one camera in use.
The problem is that when we try to launch 2 streams one of them halts and the other one keeps going. We are using the following pipeline:
gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM),width=2880, height=1860, framerate=20/1, format=NV12' ! fakesink nvarguscamerasrc sensor-id=1 ! 'video/x-raw(memory:NVMM),width=2880, height=1860, framerate=20/1, format=NV12' ! fakesink
Also:
v4l2-ctl -d /dev/video1 --set-fmt-video=width=2880,height=1860 --set-ctrl bypass_mode=0 --stream-mmap
and
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2880,height=1860 --set-ctrl bypass_mode=0 --stream-mmap
It does not matter if the launch is on separate consoles, or if there is some time between them.
Here what we tried:
- boost with jetson_clocks
- boost the capture clocks with:
echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked echo 1 > /sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate cat /sys/kernel/debug/bpmp/debug/clk/emc/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/emc/rate
- export enableCamInfiniteTimeout=1
- Increase CAPTURE_TIMEOUT_MS on /kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c
Logs:
kernel with gst-launch:
[RCE] VM0 deactivating.VM0 activating.ERROR: camera-ip/vi5/vi5.c:745 [vi5_handle_eof] “General error queue is out of sync with frame queue. ts=1035748457952 sof_ts=1036098803040 gerror_code=2 gerror_data=a0 notify_bits=4”
kernel with v4l2:
[ 772.585775] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: flags 2, err_data 0
[ 772.608771] [RCE] VM0 deactivating.VM0 activating.VM0 deactivating.VM0 activating.ERROR: camera-ip/vi5/vi5.c:745 [vi5_handle_eof] “General error queue is out of sync with frame queue. ts=795989042016 sof_ts=796089398016 gerror_code=2 gerror_data=a0 notify_bits=4”
[ 775.104703] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
[ 775.104952] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 775.105857] (NULL device *): vi_capture_control_message: NULL VI channel received
[ 775.106024] t194-nvcsi 13e10000.host1x:nvcsi@15a00000: csi5_stream_close: Error in closing stream_id=0, csi_port=0
[ 775.106271] (NULL device *): vi_capture_control_message: NULL VI channel received
[ 775.106418] t194-nvcsi 13e10000.host1x:nvcsi@15a00000: csi5_stream_open: VI channel not found for stream- 0 vc- 1
[ 775.106892] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: successfully reset the capture channel
Traces: link
Did I miss something else that needs to be modified so the driver can work on JP 5?
Also as a note, after the problem occurs, we need to restart argus-daemon, otherwise we cannot launch a stream. Also dual capture was working on JP4, with jetson_clks and the enableCamInfiniteTimeout=1 export