AGX Thor Holoscan, ISX031( YUV422 ) camera SIPL bringup

I’m currently bringing up a CSI ISX031 camera using a Lattice EVM and AGX Thor Devkit.

I have a few questions regarding SIPL usage:

I want to use SIPL for zero-copy capability. However, I’ve noticed that all the SIPL examples I’ve found only demonstrate cameras that output Bayer (RAW) format data.

My questions are:

Can SIPL be used with the ISX031 camera, which processes data through its internal ISP and outputs YUV422 format (rather than RAW/Bayer)?
If SIPL does support this configuration with YUV422 output from the camera’s internal ISP, do I need to create both UDDF and SIPL JSON configuration files?

Thanks in advance!

hello daegyu,

please see-also below for the support formats.
for instance, /usr/src/jetson_sipl_api/sipl/include/NvSIPLCapStructs.h

enum NvSiplCapInputFormatType {
    /** Specifies YUV 4:2:2 8 bits. */
    NVSIPL_CAP_INPUT_FORMAT_TYPE_YUV422,
    /** Specifies YUV 4:2:2 10 bits. */
    NVSIPL_CAP_INPUT_FORMAT_TYPE_YUV422_10,
...

you should see-also developer guide, How to Develop Your Own Query Database JSON File.

BTW,
YUV cameras use only ICP pipeline, and no ISP outputs are supported.

I haven’t been able to find any examples or detailed docs for non-Bayer format cameras with SIPL. The only thing I found is NVSIPL_CAP_INPUT_FORMAT_TYPE_YUV422 in the header files.

Does YUV422 actually work with SIPL? Since ISX031 outputs YUV422, I want to know if this format is really supported for SIPL capture, not just defined in the header.

Anyone have experience with this?

I just ordered my camera, and have been reviewing github and holoscan docs. Here’s some information that might be helpful if you haven’t already got it.

Have you compiled sipl source?

cp -r /usr/src/jetson_sipl_api/sipl $HOME/sipl
cd ~/sipl
mkdir build && cd build
cmake ..
make -j10
sudo make install 

/usr/bin/nvsipl_coe_camera

nvsipl_coe_camera --help
Usage:
-h or --help                               :Prints this help
-r or --runfor <seconds>                   :Exit application after n seconds (default is 5s)
-c or --platform-config 'name'             :Platform configuration. Supported values
        VB1940_Camera
-t or --test-config-file <file>            :Set custom platform config json file
-R or --enableRawOutput                    :enable the Raw output(default is disabled)
-0 or --disableISP0Output                  :Disable the ISP0 output(default is enabled)
-1 or --disableISP1Output                  :Disable the ISP1 output(default is enabled)
-2 or --disableISP2Output                  :Disable the ISP2 output(default is enabled)
-W or --writeFrames <val>                  :Number of frames to write to file (default is 0)
-f or --filedump-prefix 'str'              :Dump file with filename prefix 'str' when output is enabled.
                                           :Eg: '-f coe' when RAW output is enabled(coe_sensor0_raw_frame_1.raw).
                                           :Eg: '-f coe' when ISP0 output is enabled(coe_sensor0_ISP0_frame_1.yuv).
                                           :Eg: '-f coe' when ISP1 output is enabled(coe_sensor0_ISP1_frame_1.yuv).
                                           :Eg: '-f coe' when ISP2 output is enabled(coe_sensor0_ISP2_frame_1.yuv420).
-v or --verbosity <val>                    :Verbosity level (default is 1)
-N or --nito <folder>                      :Path to folder containing NITO files
                                           :Order of preference: NITO_PATH environment variable, -N argument, default path
                                           :default path: /var/nvidia/nvcam/settings/sipl/
                                           :Eg: '-N /home/ubuntu/vb1940.nito'
-m or --sensor-enable-masks 'masks'       :Enable masks for HSBs (Hardware Sync Boards) - exact legacy SIPL approach
                                           :Each mask = one HSB (like deserializer), predefined bit values for each sensor
                                           :For 2-sensor HSB: 0x10=sensor0, 0x01=sensor1, 0x11=both, 0x00=none
                                           :Like legacy LINK_0=0x0001, but reversed: 0x10=first, 0x01=second
                                           :Only specific bit patterns allowed: 0x00, 0x01, 0x10, 0x11
                                           :For 2 HSBs with 2 sensors each:
                                           :Eg: '0x10 0x01' enables local sensor 0 on HSB0, local sensor 1 on HSB1
                                           :Eg: '0x01 0x10' enables local sensor 1 on HSB0, local sensor 0 on HSB1
                                           :Eg: '0x11 0x00' enables both sensors on HSB0, disables HSB1
                                           :Eg: '0x11 0x11' enables both sensors on both HSBs
--coeConfigOverridePath <file>             :Path to CoE config override file

These are additional repos that mention yuv and have samples to work with yuv.

git clone https://github.com/nvidia-holoscan/holoscan-sdk.git

git clone https://github.com/nvidia-holoscan/holohub

git clone https://github.com/nvidia-holoscan/holoscan-sensor-bridge.git

holoscan-sensor-bridge

./src/hololink/operators/argus_isp/argus_impl.hpp:    OUTPUT_PIXEL_FORMAT_YUV420 = 0,
./src/hololink/operators/argus_isp/argus_impl.hpp:    OUTPUT_PIXEL_FORMAT_YUV444,
./src/hololink/operators/argus_isp/argus_impl.hpp:    OutputPixelFormat output_pixel_format_ = OUTPUT_PIXEL_FORMAT_YUV420;
./src/hololink/operators/argus_isp/argus_impl.cpp:    case OUTPUT_PIXEL_FORMAT_YUV420:
./src/hololink/operators/argus_isp/argus_isp.cpp:    argus_impl_->output_pixel_format_ = OUTPUT_PIXEL_FORMAT_YUV420;

pip install holoscan-cu13 holoscan-cli