Hello,
I’m experiencing persistent NV12 chroma (UV plane) corruption on the second and subsequent runs of a 4-camera nvarguscamerasrc pipeline. The first run after reboot is always perfect. Every subsequent run shows severe purple/magenta color banding across all 4 cameras. Rebooting always fixes it for exactly one run.
System Info
-
Platform: Jetson AGX Orin 64GB (Developer Kit)
-
L4T: R35.5.0 (JetPack 5.1.3)
-
Cameras: 4x IMX477 (Raspberry Pi HQ Camera) connected via CSI
-
Carrier board: NVIDIA stock devkit carrier (p3737-0000)
-
Application: DeepStream 6.3 with nvarguscamerasrc → nvstreammux → nvinfer → nvtracker → tiler → encoder → MP4 recording
$ cat /etc/nv_tegra_release
R35 (release), REVISION: 5.0, …
$ uname -r
5.10.192-tegra
Problem Description
- Boot the Jetson
- Run a 4-camera pipeline (nvarguscamerasrc sensor-id=0..3, 1920x1080 NV12 @ 30fps)
- Record ~30s, stop cleanly with EOS → Video is perfect
- Immediately run the same pipeline again
- Record ~30s, stop cleanly with EOS → Video has severe chroma corruption
The corruption is clearly in the NV12 UV (chroma) plane — the Y (luma) plane appears correct. Colors show purple/magenta banding patterns. This reproduces 100% of the time.
What I’ve Tried (all failed to fix the corruption)
1. Patched libnvscf.so + libnvfusacap.so (from forum thread #296980)
- Downloaded and installed the patched libraries
- Result: No change in corruption behavior
2. Flashed async RCE firmware
- Downloaded camera-rtcpu-t234-rce.img.r35.5.asynchronous
- Flashed via:
sudo ./flash.sh -r -k A_rce-fw jetson-agx-orin-devkit mmcblk0p1 - Verified new firmware SHA1: 761d9d48563b4131a5af3b34f2c9f19a713a222d
- Result: Eliminated timeout errors, but corruption still persists on second run
3. v4l2-ctl stream flush before pipeline start
- Attempted to flush 300 raw frames through each /dev/videoX device before starting nvarguscamerasrc
- Result: Made it WORSE — corruption appeared on the first run instead of just the second
4. Applied kernel patches from forum thread #310963
- Manually applied the vi5_fops DMA buffer leak fix (0001-vi5_fops-fix-mem-leak.patch) to vi5_fops.c:
- Added
chan->request_iova[vi_port]tracking integra_channel_capture_setup() - Added
dma_free_coherent()forchan->request[vi_port]invi5_channel_stop_streaming()beforefilp_close() - Added
dma_addr_t request_iova[TEGRA_CSI_BLOCKS]tostruct tegra_channelin mc_common.h
- Added
- The capture-ivc race condition patch (0001-capture-ivc-fix-multi-cam-race-condition.patch) was already applied in r35.5.0
- The CSI event sync patch (0001-kernel-camera-remove-csi-enent-sync-for-recover.patch) failed to apply — line numbers didn’t match r35.5.0 source
- Built and installed the patched kernel
- Result: Clean shutdowns (no more Argus Timeout errors or segfaults), but chroma corruption still persists on second run
5. NV12→RGBA→NV12 roundtrip per camera
- Added nvvideoconvert (compute-hw=1) to convert NV12→RGBA→NV12 per camera before streammux
- Result: Did not fix corruption on second run
6. nvargus-daemon restart between runs
- Stop daemon, pkill -9, sleep 5, clear /var/nvidia/nvcam/settings/*.bin, restart with enableCamInfiniteTimeout=1
- Result: Does not fix corruption
Observations
- The corruption is 100% reproducible on the second run and 100% absent on the first run after reboot
- Only a full reboot clears the state — daemon restart is not enough
- All 4 cameras show the same corruption simultaneously
- The luma (Y) plane appears correct; only chroma (UV) is affected
- No kernel panics or crashes (especially after the vi5_fops patch)
- This suggests some state is leaking between runs at a level below userspace (kernel VI driver, ISP firmware, or RCE firmware)
First run (always works):
gst-launch-1.0 -e
nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1,format=NV12’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=NV12’ ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=/tmp/run1.mp4
Wait for clean shutdown, then second run (always corrupted):
gst-launch-1.0 -e
nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1,format=NV12’ ! nvvidconv ! ‘video/x-raw(memory:NVMM),format=NV12’ ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=/tmp/run2.mp4
run1.mp4 = perfect colors
run2.mp4 = purple/magenta chroma corruption
Questions
- Is there additional state in the ISP/VI/RCE firmware that persists after
vi5_channel_stop_streaming()and is NOT cleared by the DMA buffer leak fix? - Could the embedded data buffers (
chan->emb_buf) also need to be freed instop_streaming? (The original patch freeschan->requestbut I noticeemb_bufis only freed ifemb_buf_size > chan->emb_buf_sizeduring the nextstart_streaming) - The third patch (0001-kernel-camera-remove-csi-enent-sync-for-recover.patch) failed to apply on r35.5.0 — could this be the missing piece?
- Would downgrading to L4T r35.4.1 resolve this issue? (FrankPCP’s testing in thread
#291736post #19 showed r35.4.1 vi5_fops.c was stable for 20+ cycles) - any suggestions or potential solutions?
Thank you for any guidance.

