Video4Linux shows artifacts when nvgstcapture does not


I am using an OV9281 camera (monochome Y10 format) over the CSI lanes on a Jetson Orin Nano (AverMedia DL131L carrier board) using JetPack 6.0. I am seeing artifacts in the image (lines that are 32 pixels long that appear to be artifacts from prior frames). Since monochrome cameras are not supported by libargus, I’m using V4L2 to get the raw image. The same code used to work fine on JetPack 5.1.3.

For the purposes of this post, I decided to try the ubiquitous IMX219 camera instead using both nvgstcapture to stream video and v4l2-ctl to stream video. When I stream video using nvgstcapture there are no artifacts, so it does not appear to be a hardware issue. However, when I stream video using v4l2-ctl I do get the artifacts! So the following is true:

  1. nvgstcapture does not show artifacts
  2. v4l2-ctl does show artifacts
  3. The problem occurs for both an IMX219 (bayer colour) camera and an OV9281 (monochrome) camera over the exact same CSI lanes.

My current hypothesis is that something has changed between JetPack 5.1.3 and JetPack 6.0 in the V4L2 framework that is causing these unwanted artifacts. It is a crucial issue for us because we want to use the OV9281 camera, which is not supported by libargus. Any help would be appreciated. I have attached two videos illustrating the difference between v4l2-ctl streaming (especially near the end of the video) and nvgstcapture streaming:

hello dan.madill,

this is known issue on JP-6, as you can see… Topic 292692.

FYI, the issue is observed only with v4l2src, and we’re still checking with it.
you may change it to nvv4l2camerasrc plugin as temporary solution.

Thank you for letting me know. I had searched for other posts but missed the one you reference.

Just as an added piece of information, since it is under investigation, in my original application (not posted about here) I use V4L2 directly (ioctl’s) without going through gstreamer and I observe the same issue.

hello dan.madill,

yes, this might be the issue for buffer allocation in the VI driver side.
it could be workaround by dropping some frames, i.e. --stream-skip options.
for instance, issue gone if you try skip frames (as many as possible) to dump a raw file via v4l2.
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --stream-skip=999 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1 --stream-to=/tmp/frame1920x1080.raw

I tried skipping frames and thought it worked, but as soon as I streamed video instead I could see that the problem was still there. It just may not happen every frame. That’s why I posted videos instead of still images.

hello dan.madill,

as mentioned, we’re still checking with it. please try with nvv4l2camerasrc plugin as temporary solution.

1 Like