NVIDIA Jetso Xavier NX Sony IMX568 gstreamer capture wrong image format (image two and a half times)

Hello
We use the Sony IMX586 via MIPI /CSI on an NVIDIA Jetson Xavier NX. We can stream images, but the images are displayed two and a half times.

We use the following GStreamer command:
“gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! ‘video/x-raw(memory:NVMM),width=2464,height=2048,format=(string)NV12,framerate=(fraction)30/1’ ! nvvidconv ! queue ! autovideosink”

Does anyone have any idea what we have configured wrong?

Hi,
Please share vendor of the camera for reference. It looks like there is certain issue in sensor driver or device tree. Would suggest consult with the vendor for support.

Hi
The vandor is Vision Componant and the product is " VC MIPI IMX568". We use the following device tree file:

/*
 * Copyright (c) 2020-2023, Vision Components GmbH.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <dt-bindings/media/camera.h>
#include <dt-bindings/version.h>

// ------------------------------------------------------------------------------------------------
//  Driver Configuration for NVIDIA Jetson Xavier NX on NVIDIA Jetson Xavier NX Developer Kit
// ------------------------------------------------------------------------------------------------
#define VC_MIPI_CAM_0       1   // 1: Enabled, 0: Disabled  (serial_a => CSI Port 0 => VI Stream 0)
#define VC_MIPI_CAM_1       1   // 1: Enabled, 0: Disabled  (serial_c => CSI Port 2 => VI Stream 2)
// ------------------------------------------------------------------------------------------------
//  Supported number of lanes
// -----+------------------------------------------------------------------------------------------
//  1   | OV7251, IMX296, IMX297
//  2   | OV9281, IMX264, IMX265
//  2,4 | IMX178, IMX183, IMX226, IMX250, IMX252, IMX273, IMX290, IMX327, IMX335, IMX392, 
//      | IMX412, IMX415, IMX462, IMX565, IMX566, IMX567, IMX568
// -----+------------------------------------------------------------------------------------------
#define VC_MIPI_LANES       2   // 1, 2 Lanes
// ------------------------------------------------------------------------------------------------
//  Embedded Metadata Height
// -----+------------------------------------------------------------------------------------------
//  0   | IMX178, IMX183, IMX226, IMX250, IMX252, IMX264, IMX265, IMX273, IMX392, OV7251, OV9281
//  1   | IMX290, IMX327, IMX335, IMX415, IMX462
//  2   | IMX296, IMX297, IMX412
//  4   | IMX565, IMX566, IMX567, IMX568
// -----+------------------------------------------------------------------------------------------
#define VC_MIPI_METADATA_H  "4" // "0", "1", "2", "4" Lines of meta data
// ------------------------------------------------------------------------------------------------
//   Sensor Manufacturer
// -----+------------------------------------------------------------------------------------------
//   1  | Sony Sensor (IMX)
//   2  | Omni Vision Sensor (OV)
// -----+------------------------------------------------------------------------------------------
#define VC_MIPI_MANUFACTURER 1
// ------------------------------------------------------------------------------------------------
//  GStreamer Support
// ------------------------------------------------------------------------------------------------
//  If you want to use GStreamer with nvarguscamerasrc you have to adjust this settings in the 
//  device tree below. The sections which have to be modified are marked by a comment. 
//  To find the correct parameter values please follow the instruction in the main README.md of 
//  this repository https://github.com/VC-MIPI-modules/vc_mipi_nvidia#gstreamer-support
// ------------------------------------------------------------------------------------------------

#if VC_MIPI_LANES == 1
    #define BUS_WIDTH 1
    #define NUM_LANES "1" 
    #define NUM_CSI_LANES 2
#endif
#if VC_MIPI_LANES == 2
    #define BUS_WIDTH 2
    #define NUM_LANES "2" 
    #define NUM_CSI_LANES 4
#endif

#if VC_MIPI_CAM_0 == 1 && VC_MIPI_CAM_1 == 1
    #define VC_MIPI_CAMERAS 2
#else
    #define VC_MIPI_CAMERAS 1
#endif

/ {
#if LINUX_VERSION < 500
        host1x {
        vc_vi_base: vi@15c10000 {
#else
        tegra-capture-vi  {
#endif
                num-channels = <VC_MIPI_CAMERAS>;
                ports {
                        #address-cells = <1>;
                        #size-cells = <0>;
#if VC_MIPI_CAM_0 == 1
                        vc_vi_port0: port@0 {
                                reg = <0>;
                                vc_vi_in0: endpoint {
                                        port-index = <0>;
                                        bus-width = <BUS_WIDTH>;
                                        remote-endpoint = <&vc_csi_out0>;
                                };
                        };
#endif
#if VC_MIPI_CAM_1 == 1
                        vc_vi_port1: port@1 {
                                reg = <1>;
                                vc_vi_in1: endpoint {
                                        port-index = <2>;
                                        bus-width = <BUS_WIDTH>;
                                        remote-endpoint = <&vc_csi_out1>;
                                };
                        };
#endif
                }; // ports
        };

#if LINUX_VERSION < 500

        vc_csi_base: nvcsi@15a00000 {
#else
        host1x@13e00000 {
                nvcsi@15a00000 {
#endif
                        num-channels = <VC_MIPI_CAMERAS>;
                        #address-cells = <1>;
                        #size-cells = <0>;
#if VC_MIPI_CAM_0 == 1
                        vc_csi_chan0: channel@0 {
                                reg = <0>;
                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
                                        vc_csi_chan0_port0: port@0 {
                                                reg = <0>;
                                                vc_csi_in0: endpoint@0 {
                                                        port-index = <0>;
                                                        bus-width = <BUS_WIDTH>;
                                                        remote-endpoint = <&vc_mipi_out0>;
                                                };
                                        };
                                        vc_csi_chan0_port1: port@1 {
                                                reg = <1>;
                                                vc_csi_out0: endpoint@1 {
                                                        remote-endpoint = <&vc_vi_in0>;
                                                };
                                        };
                                };
                        };
#endif

#if VC_MIPI_CAM_1 == 1
                        vc_csi_chan1: channel@1 {
                                reg = <1>;
                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
                                        vc_csi_chan1_port0: port@0 {
                                                reg = <0>;
                                                vc_csi_in1: endpoint@2 {
                                                        port-index = <2>;
                                                        bus-width = <BUS_WIDTH>;
                                                        remote-endpoint = <&vc_mipi_out1>;
                                                };
                                        };
                                        vc_csi_chan1_port1: port@1 {
                                                reg = <1>;
                                                vc_csi_out1: endpoint@3 {
                                                        remote-endpoint = <&vc_vi_in1>;
                                                };
                                        };
                                };
                        };
#endif

#if LINUX_VERSION >= 500
                };
#endif
        };

#if LINUX_VERSION < 500
        };
#endif

        cam_i2cmux {
#if VC_MIPI_CAM_0 == 1
                i2c@0 {
#if VC_MIPI_MANUFACTURER == 1
                        vc_mipi_cam0: vc_mipi@1a {
                                reg                     = <0x1a>;
#else
                        vc_mipi_cam0: vc_mipi@60 {
                                reg                     = <0x60>;
#endif
                                compatible              = "nvidia,vc_mipi";
                                devnode                 = "video0";
                                use_sensor_mode_id      = "false";
                                sensor_model            = "vc_mipi";

                                num_lanes               = NUM_LANES;
                                trigger_mode            = "0";
                                io_mode                 = "0";

                                // ----------------------------------------------------
                                // If you want to use GStreamer with nvarguscamerasrc
                                // you have to adjust this settings
                                physical_w              = "6.752";
                                physical_h              = "5.612";
                                // ----------------------------------------------------

                                // This node is needed by the Tegra framework.
                                // You don't have to change any settings if just want to use the V4L API.
                                mode0 {
                                        num_lanes                = NUM_LANES;
                                        tegra_sinterface         = "serial_a";
                                        embedded_metadata_height = VC_MIPI_METADATA_H;
                                        readout_orientation      = "0";

                                        // ----------------------------------------------------
                                        // If you want to use GStreamer with nvarguscamerasrc
                                        // you have to adjust this settings. 
                                        active_l                 = "0";
                                        active_t                 = "0";
                                        active_w                 = "2464";
                                        active_h                 = "2048";
                                        mode_type                = "bayer";
                                        pixel_phase              = "rggb";
                                        csi_pixel_bit_depth      = "12";
                                        min_gain_val             = "0";         // mdB
                                        max_gain_val             = "48000";     // mdB
                                        step_gain_val            = "100";       // mdB
                                        default_gain             = "0";         // mdB

                                        min_exp_time             = "1";         // us
                                        max_exp_time             = "1000000";   // us
                                        step_exp_time            = "1";         // us
                                        default_exp_time         = "10000";     // us

                                        // For applications like argus_camera, there should 
                                        // be a minimal frame rate greater than zero!
                                        min_framerate            = "1000";      // mHz
                                        max_framerate            = "34600";     // mHz
                                        step_framerate           = "100";       // mHz
                                        default_framerate        = "34600";     // mHz
                                        // ----------------------------------------------------

                                        gain_factor              = "1000";
                                        exposure_factor          = "1000000";
                                        framerate_factor         = "1000";
                                        inherent_gain            = "1";
                                        min_hdr_ratio            = "1";
                                        max_hdr_ratio            = "1";

                                        line_length              = "0";
                                        phy_mode                 = "DPHY";
                                        discontinuous_clk        = "no";
                                        mclk_khz                 = "24000";
                                        pix_clk_hz               = "74250000";
                                        mclk_multiplier          = "9.33";
                                        cil_settletime           = "0";
                                        dpcm_enable              = "false";
                                };

                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
                                        port@0 {
                                                reg = <0>;
                                                vc_mipi_out0: endpoint {
                                                        port-index = <0>;
                                                        bus-width = <BUS_WIDTH>;
                                                        remote-endpoint = <&vc_csi_in0>;
                                                };
                                        };
                                };
                        };
                };
#endif // VC_MIPI_CAM_0

#if VC_MIPI_CAM_1 == 1
                i2c@1 {
#if VC_MIPI_MANUFACTURER == 1
                        vc_mipi_cam1: vc_mipi@1a {
                                reg                     = <0x1a>;
#else
                        vc_mipi_cam1: vc_mipi@60 {
                                reg                     = <0x60>;
#endif
                                compatible              = "nvidia,vc_mipi";
                                devnode                 = "video1";
                                use_sensor_mode_id      = "false";
                                sensor_model            = "vc_mipi";

                                num_lanes               = NUM_LANES;
                                trigger_mode            = "0";
                                io_mode                 = "0";

                                // ----------------------------------------------------
                                // If you want to use GStreamer with nvarguscamerasrc
                                // you have to adjust this settings
                                physical_w              = "6.752";
                                physical_h              = "5.612";
                                // ----------------------------------------------------

                                // This node is needed by the Tegra framework.
                                // You don't have to change any settings if just want to use the V4L API.
                                mode0 {
                                        num_lanes                = NUM_LANES;
                                        tegra_sinterface         = "serial_c";
                                        embedded_metadata_height = VC_MIPI_METADATA_H;
                                        readout_orientation      = "0";

                                        // ----------------------------------------------------
                                        // If you want to use GStreamer with nvarguscamerasrc
                                        // you have to adjust this settings. 
                                        active_l                 = "0";
                                        active_t                 = "0";
                                        active_w                 = "2464";
                                        active_h                 = "2048";
                                        mode_type                = "bayer";
                                        pixel_phase              = "rggb";
                                        csi_pixel_bit_depth      = "12";
                                        min_gain_val             = "0";         // mdB
                                        max_gain_val             = "48000";     // mdB
                                        step_gain_val            = "100";       // mdB
                                        default_gain             = "0";         // mdB

                                        min_exp_time             = "1";         // us
                                        max_exp_time             = "1000000";   // us
                                        step_exp_time            = "1";         // us
                                        default_exp_time         = "10000";     // us

                                        // For applications like argus_camera, there should 
                                        // be a minimal frame rate greater than zero!
                                        min_framerate            = "1000";      // mHz
                                        max_framerate            = "34600";     // mHz
                                        step_framerate           = "100";       // mHz
                                        default_framerate        = "34600";     // mHz
                                        // ----------------------------------------------------

                                        gain_factor              = "1000";
                                        exposure_factor          = "1000000";
                                        framerate_factor         = "1000";
                                        inherent_gain            = "1";
                                        min_hdr_ratio            = "1";
                                        max_hdr_ratio            = "1";

                                        line_length              = "0";
                                        phy_mode                 = "DPHY";
                                        discontinuous_clk        = "no";
                                        mclk_khz                 = "24000";
                                        pix_clk_hz               = "74250000";
                                        mclk_multiplier          = "9.33";
                                        cil_settletime           = "0";
                                        dpcm_enable              = "false";
                                };

                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
                                        port@0 {
                                                reg = <0>;
                                                vc_mipi_out1: endpoint {
                                                        port-index = <2>;
                                                        bus-width = <BUS_WIDTH>;
                                                        remote-endpoint = <&vc_csi_in1>;
                                                };
                                        };
                                };
                        };
                };
#endif // VC_MIPI_CAM_1
        };

        lens@vc_mipi {
                min_focus_distance  = "0.0";
                hyper_focal         = "0.0";
                focal_length        = "6.0";
                f_number            = "2.0";
                aperture            = "0.0";
        };
};

/ {
        tcp: tegra-camera-platform {
                compatible = "nvidia, tegra-camera-platform";

                num_csi_lanes = <NUM_CSI_LANES>;
                max_lane_speed = <1500000>;
                min_bits_per_pixel = <10>;
                vi_peak_byte_per_pixel = <2>;
                vi_bw_margin_pct = <25>;
                max_pixel_rate = <240000>;
                isp_peak_byte_per_pixel = <5>;
                isp_bw_margin_pct = <25>;

                modules {
#if VC_MIPI_CAM_0 == 1
                        cam_module0: module0 {
                                status = "okay";
                                badge = "jakku_front_vc_mipi";
                                position = "front";
                                orientation = "1";
                                cam_module0_drivernode0: drivernode0 {
                                        status = "okay";
                                        pcl_id = "v4l2_sensor";
#if VC_MIPI_MANUFACTURER == 1
                                        devname = "vc_mipi 9-001a";
                                        proc-device-tree = "/proc/device-tree/cam_i2cmux/i2c@0/vc_mipi@1a";
#else
                    devname = "vc_mipi 9-0060";
                    proc-device-tree = "/proc/device-tree/cam_i2cmux/i2c@0/vc_mipi@60";
#endif
                                };
                                cam_module0_drivernode1: drivernode1 {
                                        status = "okay";
                                        pcl_id = "v4l2_lens";
                                        proc-device-tree = "/proc/device-tree/lens@vc_mipi/";
                                };
                        };
#endif // VC_MIPI_CAM_0

#if VC_MIPI_CAM_1 == 1
                        cam_module1: module1 {
                                status = "okay";
                                badge = "jakku_rear_vc_mipi";
                                position = "rear";
                                orientation = "1";
                                cam_module1_drivernode0: drivernode0 {
                                        status = "okay";
                                        pcl_id = "v4l2_sensor";
#if VC_MIPI_MANUFACTURER == 1
                                devname = "vc_mipi 10-001a";
                                proc-device-tree = "/proc/device-tree/cam_i2cmux/i2c@1/vc_mipi@1a";
#else
                                devname = "vc_mipi 10-0060";
                                proc-device-tree = "/proc/device-tree/cam_i2cmux/i2c@1/vc_mipi@60";
#endif
                                };
                                cam_module1_drivernode1: drivernode1 {
                                        status = "okay";
                                        pcl_id = "v4l2_lens";
                                        proc-device-tree = "/proc/device-tree/lens@vc_mipi/";
                                };
                        };
#endif // VC_MIPI_CAM_1
                };
        };
};

#define CAM0_PWDN     TEGRA194_MAIN_GPIO(P, 4)
#define CAM1_PWDN     TEGRA194_MAIN_GPIO(P, 5)
#define CAM_I2C_MUX   TEGRA194_AON_GPIO(CC, 3)

/ {
        cam_i2cmux {
                status = "okay";
                compatible = "i2c-mux-gpio";
                #address-cells = <1>;
                #size-cells = <0>;
                mux-gpios = <&tegra_aon_gpio CAM_I2C_MUX GPIO_ACTIVE_HIGH>;
                i2c-parent = <&cam_i2c>;
#if VC_MIPI_CAM_0 == 1
                i2c@0 {
                        status = "okay";
                        reg = <0>;
                        #address-cells = <1>;
                        #size-cells = <0>;
#if VC_MIPI_MANUFACTURER == 1
                        vc_mipi@1a {
#else
                        vc_mipi@60 {
#endif
                                status = "okay";
                                reset-gpios = <&tegra_main_gpio CAM0_PWDN GPIO_ACTIVE_HIGH>;
                        };
                };
#endif
#if VC_MIPI_CAM_1 == 1
                i2c@1 {
                        status = "okay";
                        reg = <1>;
                        #address-cells = <1>;
                        #size-cells = <0>;
#if VC_MIPI_MANUFACTURER == 1
                        vc_mipi@1a {
#else
                        vc_mipi@60 {
#endif
                                status = "okay";
                                reset-gpios = <&tegra_main_gpio CAM1_PWDN GPIO_ACTIVE_HIGH>;
                        };
                };
#endif
        };

        gpio@2200000 {
                camera-control-output-low {
                        gpio-hog;
                        output-low;
                        gpios = <CAM0_PWDN 0 CAM1_PWDN 0>;
                        label = "cam0-pwdn","cam1-pwdn";
                };
        };
};

Hi,
It looks like the vendor has validated it in multiple Jetpack releases. Please make sure your version matches and the device tree is well applied. You can check if the device tree is correct by running xxd command. Here is an example of xxd command:
USB doen’t work on Custom Board //JetPack 4.3 R32.31 - #4 by DaneLLL

Hi,
Thanks for your suggestions. We will test this as soon as possible.
As a note, we have used the instructions on the following website:

Hi,
here the status of the camera driver:

We would like to read out the format that is set on the MIPI. Is there a command that outputs the settings?

We found a solution for our problem. It was a wrong value for the “pix_clk_hz”.

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