Camera driver works with v4l2-ctl but fails to launch argus_camera

Hi Nvidia team,

We are currently developing a camera driver on JetPack 7.1.

While we can successfully capture frames and verify the frame rate using the v4l2-ctl command, we are running into issues when launching argus_camera (it fails to start).

Here are the details and configuration files for your reference:

  1. Device Tree
/ {
	tegra-capture-vi {
		num-channels = <1>;
		ports {
			status = "okay";
			port@0 {
				reg = <0>;
				status = "okay";
				jetson_vi_in0: endpoint {
					status = "okay";
					vc-id = <0>;
					port-index = <0>;
					bus-width = <4>;
					remote-endpoint = <&jetson_csi_out0>;
				};
			};
		};
	};

	bus@0 {

		host1x@8181200000 {
			nvcsi@8188000000 {
				num-channels = <1>;
				channel@0 {
					reg = <0>;
					status = "okay";
					ports {
						status = "okay";
						port@0 {
							reg = <0>;
							status = "okay";
							jetson_csi_in0: endpoint@0 {
								status = "okay";
								port-index = <0>;
								bus-width = <4>;
								remote-endpoint = <&cam_csi_out0>;
							};
						};
						port@1 {
							reg = <1>;
							status = "okay";
							jetson_csi_out0: endpoint@1 {
								status = "okay";
								remote-endpoint = <&jetson_vi_in0>;
							};
						};
					};
				};
			};
		};

		i2c@810c6d0000 {
			clock-frequency = <100000>;
			status = "okay";

			max96712_0@4b {
				compatible = "nvidia,max96712_0";
				reg = <0x4b>;
			};

			cam_0@20 {
				compatible = "******,sgcam-gmsl2-0";
				def-addr = <0x36>;
				reg = <0x20>;
				eeprom-def = <0x50>;
				eeprom-addr = <0x30>;
				devnode = "video0";

				/* Physical dimensions of sensor */
				physical_w = "15.0";
				physical_h = "12.5";

				sensor_model ="******";

				/* Defines number of frames to be dropped by driver internally after applying */
				/* sensor crop settings. Some sensors send corrupt frames after applying */
				/* crop co-ordinates */
				post_crop_frame_drop = "0";

				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
				use_decibel_gain = "false";

				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
				use_sensor_mode_id = "true";

				clocks = <&bpmp TEGRA264_CLK_EXTPERIPH1>,
				<&bpmp TEGRA264_CLK_EXTPERIPH1>;
				clock-names = "extperiph1", "pllp_grtba";
				mclk = "extperiph1";
				der_id = <0>;

				mode0 {
					mclk_khz = "24000";
					num_lanes = "4";
					tegra_sinterface = "serial_a";
					vc_id = "0";
					phy_mode = "CPHY";
					discontinuous_clk = "no";
					dpcm_enable = "false";
					cil_settletime = "0";
					lane_polarity = "0";
					dynamic_pixel_bit_depth = "16";
					csi_pixel_bit_depth = "12";
					mode_type = "bayer_wdr_pwl";
					pixel_phase = "bggr";

					active_w = "3840";
					active_h = "2160";
					readout_orientation = "0";
					line_length = "4400";
					inherent_gain = "1";
					mclk_multiplier = "25";
					pix_clk_hz = "320000000";
					serdes_pix_clk_hz = "600000000";

					gain_factor = "100";
					min_gain_val = "100"; 
					max_gain_val = "1550"; 
					step_gain_val = "1";
					default_gain = "100"; 
					min_hdr_ratio = "1";
					max_hdr_ratio = "1";
					framerate_factor = "1000000";
					min_framerate = "30000000";
					max_framerate = "30000000";
					step_framerate = "1";
					default_framerate = "30000000";
					exposure_factor = "1000000";
					min_exp_time = "25"; 
					max_exp_time = "31000";
					step_exp_time = "1";
					default_exp_time = "31000";/* us */
					embedded_metadata_height = "0";

					/* WDR related settings */
                                        ......
				};

				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						cam_csi_out0: endpoint {
							vc-id = <0>;
							port-index = <0>;
							bus-width = <4>;
							remote-endpoint = <&jetson_csi_in0>;
						};
					};
				};
			};
		};
	};

	tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";

		modules {
			status = "okay";
			module0 {
				status = "okay";
				badge = "cam_bottomleft";
				position = "bottomleft";
				orientation = "1";
				drivernode0 {
					status = "okay";
					pcl_id = "v4l2_sensor";
					devname = "sgcam-gmsl2 12-0020";
					sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@810c6d0000/cam_0@20";
				};
			};
		};
	};
};
  1. v4l2-ctl Output

  2. Argus Error/Log

nvidia@jetson-thor:~/Desktop$ argus_camera -d 0
Executing Argus Sample Application (argus_camera)
Argus Version: 0.99.3.3 (multi-process)
Error generated. /usr/src/jetson_multimedia_api/argus/samples/utils/GLContext.cpp, initializeInternal:130 Could not query EGL configs (error 0x3008)
Error generated. /usr/src/jetson_multimedia_api/argus/samples/utils/GLContext.cpp, initialize:96 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp, threadInitialize:225 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/samples/utils/Thread.cpp, threadFunction:126 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp, initialize:103 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp, getInstance:78 Initalization failed
Error generated. /usr/src/jetson_multimedia_api/argus/samples/utils/Thread.cpp, waitRunning:83 Invalid thread state 3
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp, initialize:103 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp, getInstance:78 Initalization failed
Error generated. /usr/src/jetson_multimedia_api/argus/samples/utils/Thread.cpp, waitRunning:83 Invalid thread state 3
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp, initialize:103 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, createOutputStream:1983 Failed to create OutputStream
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.cpp, start:150 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.cpp, start:180 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/ui/camera/Main.cpp, onModuleChanged:336 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/samples/utils/Observed.cpp, registerObserver:62 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/ui/camera/Main.cpp, start:273 (propagating)
Error generated. /usr/src/jetson_multimedia_api/argus/apps/camera/ui/common/App.cpp, run:96 (propagating)
Segmentation fault (core dumped)
nvidia@jetson-thor:~/Desktop$
nvidia@jetson-thor:~/Desktop$ sudo service nvargus-daemon stop
export NVCAMERA_NITO_PATH=CONFIG
sudo -E enableCamInfiniteTimeout=1 nvargus-daemon

=== NVIDIA Libargus Camera Service (0.99.33)
=== Listening for connections...
=== argus_camera[12160]: Connection established (FFFFB01D88C0)
*******************************************************************
Running Power Service HW ISP
*******************************************************************
*******************************************************************
Running Power Service HW ISP
*******************************************************************
OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
---- imager: No override file found. ----
NvCameraIspInitialize: Using Config file
LSC: LSC surface is not based on full res!
[NvCameraIspDriver::initialize] NOT Using CamPG
=== argus_camera[12160]: CameraProvider initialized (0xffffa8263460)
NvCameraIspInitialize: Using Config file
LSC: LSC surface is not based on full res!
[NvCameraIspDriver::initialize] NOT Using CamPG
libEGL warning: pci id for fd 42: 10de:2b00, driver (null)

pci id for fd 43: 10de:2b00, driver (null)
pci id for fd 44: 10de:2b00, driver (null)
libEGL warning: egl: failed to create dri2 screen
pci id for fd 43: 10de:2b00, driver (null)
pci id for fd 47: 10de:2b00, driver (null)
libEGL warning: egl: failed to create dri2 screen
(Argus) Error 0x00000002: Failed to create EGLStream (in src/api/EGLOutputStreamImpl.cpp, function initialize(), line 124)
(Argus) Error 0x00000002:  (propagating from src/api/CaptureSessionImpl.cpp, function createEGLOutputStream(), line 1004)
(Argus) Error 0x00000008: Unknown stream deleted. (in src/api/CaptureSessionImpl.cpp, function outputStreamDeleted(), line 1121)
(Argus) Error 0x00000002:  (propagating from src/api/CaptureSessionImpl.cpp, function createOutputStreamInternal(), line 855)
=== argus_camera[12160]: Connection closed (FFFFB01D88C0)
=== argus_camera[12160]: WARNING: CameraProvider was not destroyed before client connection terminated.
=== argus_camera[12160]:          The client may have abnormally terminated. Destroying CameraProvider...
=== argus_camera[12160]: CameraProvider destroyed (0xffffa8263460)
=== argus_camera[12160]: WARNING: Cleaning up 1 outstanding sessions...
=== argus_camera[12160]: NOTE: Destroy all libargus objects before destroying the CameraProvider to avoid these warnings.
CaptureService:stop: is requested --------------------------
=== argus_camera[12160]: Connection cleaned up (FFFFB01D88C0)

hello norman_xu,

it looks like an error reported due to EGL config.
please give it a try to disable preview and shows frame-rate only for issue narrow down,
for instance,
$ gst-launch-1.0 nvarguscamerasrc sensor-id=0 sensor-mode=0 ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=30/1, format=NV12' ! nvvidconv ! fpsdisplaysink text-overlay=0 name=sink_0 video-sink=fakesink sync=0 -v

BTW,
since JetPack 7.2 is available, if that’s possible, please moving forward to have confirmation.

It’s fixed, the EGLStream creation failure was caused by wayland, thanks.