I am trying to use my TX2 to display analog video. I am using a chip that digitizes the video and transmits it over CSI to the Jetson. I have a driver and device tree that work for 1080p and 720p, but now I am also trying to add NTSC and PAL cameras. The issue is that these cameras have interlaced output, and I am having some issues with them.
In the device tree, I added the fields "is_interlaced=‘1’; and interlace_type=interleaved to one of the sensor modes.
When I swap to this sensor mode with v4l2-ctl and test my gstreamer pipeline, there’s no video. The real problem though is that when I close the pipeline, it doesn’t actually close. I know this because it keeps /dev/video0 busy. I can not kill the process (with kill or kill-9), and when I try to reboot, VI holds up the kernel trying to reset the capture channel for ~5 minutes until it times out.
I do not observe similar behavior on the other modes, and I don’t understand why the interlaced video would cause this. please help!
I made the error_recovery function in vi4_fops a dummy function (simply prints that is trying to reset the channel then returns), but I am still seeing the same errors
I completely removed the recover function, but I am still getting the PXL_SOF timeout continuously after closing the stream, and the thread remains unkillable
I figured out that it was a loop in vi4_fops.c. It never got the interlaced_type from the device tree, so it was stuck in the capture thread in the top_bottom section. There is a for loop that decrements the counting variable inside the loop, meaning the thread never gets to the point where it checks if it should stop. I just made sure that it always takes the “interleaved” path instead, and that fixed that problem