Cannot get video/picture from one of the CSI connectors when a camera is connected to both

I’m currently trying to verify the functionality of an IMX219-83 Stereo Camera (https://www.waveshare.com/wiki/IMX219-83_Stereo_Camera).

I noticed when I have both cameras connected, I can only take a picture using the camera connected to the CSI port closest to the USB headers. This made me think that the other CSI connector is broken, or the other camera is broken, so I tested every combination of camera and connector and found:

Both cameras work if 1 is plugged in. This extends to both connectors. I believe this is sufficient to prove that both cameras and connectors work.

If both cameras are plugged into both connectors, regardless of which camera is plugged into which connector, I cannot get a picture from the camera plugged into the connector furthest from the USB headers.

I’ve been using this command to take pictures when one camera is plugged in:

nvgstcapture-1.0

and pressing j to take a test photo.

When I have two cameras plugged in, I try:

nvgstcapture-1.0 --camsrc=0
nvgstcapture-1.0 --camsrc=1

and only one of them will work.

This is what happens when one of those commands doesn’t work:

Encoder null, cannot set bitrate!
Encoder Profile = High
Runtime USB Camera Commands:

Help : ‘h’
Quit : ‘q’
Set Capture Mode:
mo:
(1): image
(2): video
Get Capture Mode:
gmo
Capture: enter ‘j’ OR
followed by a timer (e.g., jx5000, capture after 5 seconds) OR
followed by multishot count (e.g., j:6, capture 6 images)
timer/multihot values are optional, capture defaults to single shot with timer=0s
Start Recording : enter ‘1’
Stop Recording : enter ‘0’
Set Preview Resolution:
pcr: e.g., pcr:2
(0) : 176x144
(1) : 320x240
(2) : 640x480
(3) : 1280x720
(4) : 1920x1080
NOTE: Preview/Encode resolution will be same as Capture resolution for USB-Camera
Get Preview Resolution:
gpcr
Get Image Capture Resolution:
gicr
Get Video Capture Resolution:
gvcr
Set Capture Device Node:
cdn: e.g., cdn:0
(0): /dev/video0
(1): /dev/video1
(2): /dev/video2
Get Capture Device Node:
gcdn

Runtime encoder configuration options:

Set Encoding Bit-rate(in bytes):
br: e.g., br:4000000
Get Encoding Bit-rate(in bytes):
gbr
Set Encoding Profile(only for H.264):
ep: e.g., ep:1
(0): Baseline
(1): Main
(2): High
Get Encoding Profile(only for H.264):
gep
Force IDR Frame on video Encoder(only for H.264):
Enter ‘f’

** Message: 11:12:59.170: main:4674 iterating capture loop …
ERROR on bus: by /GstPipeline:capture_native_pipeline/GstBin:cap_bin/GstV4l2Src:v4l2src0: Internal data stream error.
debug info:
gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:capture_native_pipeline/GstBin:cap_bin/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
** Message: 11:12:59.201: main:4684 Capture completed
** Message: 11:12:59.201: main:4733 Camera application will now exit

There is no output to dmesg when the command that produces the above output is run.

Thanks for any help

EDIT: Using gst-debug=2, I get this output at the bottom (don’t know what it means):

0:00:00.420555291 11801 0x7990630 WARN v4l2src gstv4l2src.c:692:gst_v4l2src_query: Can’t give latency since framerate isn’t fixated !
** Message: 11:34:47.021: main:4674 iterating capture loop …
0:00:00.422080468 11801 0x79c7140 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: Internal data stream error.
0:00:00.422131667 11801 0x79c7140 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: streaming stopped, reason not-negotiated (-4)
ERROR on bus: by /GstPipeline:capture_native_pipeline/GstBin:cap_bin/GstV4l2Src:v4l2src0: Internal data stream error.
debug info:
gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:capture_native_pipeline/GstBin:cap_bin/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
** Message: 11:34:47.050: main:4684 Capture completed
** Message: 11:34:47.053: main:4733 Camera application will now exit

hello turkishjedi21,

do you have two video nodes under /dev/video*?
if yes, please narrow down the issue by running v4l utility to test each of camera individually.
for example,
$ v4l2-ctl -d /dev/videoX --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=100

Yes, when I tried this I would get two video nodes in /dev. Oddly enough, on my first attempt to use cameras after moving to a different location (on campus), both worked. I have no idea what could have caused this but it appears to be working, at least for now

@turkishjedi21 I would like to know whether it is possible for you to share your reference design as I am also facing the similar kind of issue. I have observed some pattern in waveforms. Have you also observed any kind of pattern?

Please share, if you could, some patterns and reference design which you observed from your end.

I have also posted regarding this same issue today. Further details of the issue are shared in the link provided below:
https://forums.developer.nvidia.com/t/e-cam30-cunano-camera-not-binding-with-jetson-nano/246862?u=vatsalg

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.