This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] SK-AM69: How to stream from CSI sensor and USB camera to display using GStreamer?

Part Number: SK-AM69
Other Parts Discussed in Thread: SK-AM68, AM67, SK-TDA4VM

Tool/software:

Hi,

I have a Starter Kit (SK) Edge AI device with a CSI sensor connected and would like to stream to my display. I have enabled the sensor by following the steps outlined in section 2.1 "Hardware Setup" and have validated functionality by running one of the out of box demos as outlined in section 3. "Edge AI sample apps". How to preview camera and stream the sensor output without any DL tasks in my pipeline?

  • Hello,

    Please use this FAQ as a guide to get started with using GStreamer. Basic GStreamer pipelines are made up of two parts: input and output. This FAQ provides examples that use v4l2src to grab frames from a camera source and send the output to connected display. For more pipeline examples, see section 6. "Edge AI dataflows" of the Edge AI SDK for your respective device. For more information about GStreamer, I recommend taking a look at GStreamer tutorial pages that can be found on the web.

    RPiV2(IMX219) Raw sensor

    About this sensor: Raw sensor which requires ISP binaries, located in the /opt/imaging/imx219/linear directory, to be included in the GStreamer pipeline. If this sensor must be configured in a different resolution and format, please refer to the ISP tuning guide to generate new binaries to match your custom sensor configuration.

    SK-TDA4VM, SK-AM68, SK-AM69, AM67: Follow the steps of section 2.1.4. "RPiV2(IMX219) Raw Sensor" of the Edge AI SDK to enable this sensor.

    SK-AM62Ax: Follow the steps of section 2.1.3. "RPiV2(IMX219) Raw sensor" of the Edge AI SDK to enable this sensor.

    Note for SK-AM68, SK-AM69, AM67: If you are using IMX219 or IMX390 connected via V3Link Mini Fusion Kit, follow the steps of section 2.1.5. "Mini Fusion" of the Edge AI SDK to enable this sensor. Mini Fusion is not enabled for SK-TDA4VM

    Simple GStreamer pipeline for single input & output:

    gst-launch-1.0 \
    v4l2src device=/dev/video-imx219-cam0 io-mode=5 ! queue leaky=2 ! \
    video/x-bayer, width=1920, height=1080, framerate=30/1, format=rggb ! \
    tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_SONY_IMX219_RPI" \
    dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin \
    sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 ! \
    video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! \
    kmssink driver-name=tidss sync=false

    Simple GStreamer pipeline for multi input & output (4 camera):

    gst-launch-1.0 \
    v4l2src device=/dev/video-imx219-cam0 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev0 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_0 \
    v4l2src device=/dev/video-imx219-cam1 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev1 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_1 \
    v4l2src device=/dev/video-imx219-cam2 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev2 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_2 \
    v4l2src device=/dev/video-imx219-cam3 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev3 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_3 \
    tiovxmosaic name=mosaic \
    sink_0::startx="<0>" sink_0::starty="<0>" sink_0::widths="<960>" sink_0::heights="<540>" \
    sink_1::startx="<0>" sink_1::starty="<540>" sink_1::widths="<960>" sink_1::heights="<540>" \
    sink_2::startx="<960>" sink_2::starty="<0>" sink_2::widths="<960>" sink_2::heights="<540>" \
    sink_3::startx="<960>" sink_3::starty="<540>" sink_3::widths="<960>" sink_3::heights="<540>" ! \
    video/x-raw, width=1920, height=1080 ! kmssink driver-name=tidss sync=false force-modesetting=true

    Simple GStreamer pipeline for multi input & output (8 camera):

    gst-launch-1.0 \
    v4l2src device=/dev/video-imx219-cam0 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev0 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_0 \
    v4l2src device=/dev/video-imx219-cam1 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev1 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_1 \
    v4l2src device=/dev/video-imx219-cam2 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev2 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_2 \
    v4l2src device=/dev/video-imx219-cam3 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev3 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_3 \
    v4l2src device=/dev/video-imx219-cam4 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev4 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_4 \
    v4l2src device=/dev/video-imx219-cam5 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev5 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_5 \
    v4l2src device=/dev/video-imx219-cam6 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev6 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_6 \
    v4l2src device=/dev/video-imx219-cam7 io-mode=5 ! video/x-bayer,width=1920,height=1080,framerate=30/1,format=rggb ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx219-subdev7 sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin format-msb=7 sink_0::pool-size=8 src::pool-size=8 ! video/x-raw,format=NV12, width=1920,height=1080 ! queue ! mosaic.sink_7 \
    tiovxmosaic name=mosaic \
    sink_0::startx="<0>" sink_0::starty="<0>" sink_0::widths="<640>" sink_0::heights="<360>" \
    sink_1::startx="<640>" sink_1::starty="<0>" sink_1::widths="<640>" sink_1::heights="<360>" \
    sink_2::startx="<1280>" sink_2::starty="<0>" sink_2::widths="<640>" sink_2::heights="<360>" \
    sink_3::startx="<0>" sink_3::starty="<360>" sink_3::widths="<640>" sink_3::heights="<360>" \
    sink_4::startx="<640>" sink_4::starty="<360>" sink_4::widths="<640>" sink_4::heights="<360>" \
    sink_5::startx="<1280>" sink_5::starty="<360>" sink_5::widths="<640>" sink_5::heights="<360>" \
    sink_6::startx="<320>" sink_6::starty="<720>" sink_6::widths="<640>" sink_6::heights="<360>" \
    sink_7::startx="<960>" sink_7::starty="<720>" sink_7::widths="<640>" sink_7::heights="<360>" ! \
    video/x-raw, width=1920, height=1080 ! kmssink driver-name=tidss sync=false force-modesetting=true

    IMX390 Raw sensor

    About this sensor: Raw sensor which requires ISP binaries, located in the /opt/imaging/imx390/linear directory, to be included in the GStreamer pipeline. If this sensor must be configured in a different resolution and format, please refer to the ISP tuning guide to generate new binaries to match your custom sensor configuration.

    SK-TDA4VM: Follow the steps of section 2.1.5. "IMX390 Raw Sensor" of the Edge AI SDK to enable this sensor.

    SK-AM68, SK-AM69, AM67: Follow the steps of section 2.1.5. "Mini Fusion" of the Edge AI SDK to enable this sensor. Instead of appending the "k3-v3link-imx219-0-0.dtbo" overlay for imx219, add the "k3-fpdlink-imx390-rcm-0-0.dtbo" overlay for imx390.

    SK-AM62Ax: Follow the steps of section 2.1.4. "Mini Fusion" of the Edge AI SDK to enable this sensor. Instead of appending the "k3-v3link-imx219-0-0.dtbo" overlay for imx219, add the "k3-fpdlink-imx390-rcm-0-0.dtbo" overlay for imx390.

    Simple GStreamer pipeline for single input & output:

    gst-launch-1.0 v4l2src device=/dev/video-imx390-cam0 io-mode=dmabuf-import ! \
    video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! \
    tiovxisp sink_0::device=/dev/v4l-imx390-subdev0 sensor-name=SENSOR_SONY_IMX390_UB953_D3 \
    dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin \
    format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 \
    sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! \
    kmssink sync=false driver-name=tidss

    Simple GStreamer pipeline for multi input & output (4 camera):

    gst-launch-1.0 \
    v4l2src device=/dev/video-imx390-cam0 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev0 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_0 \
    v4l2src device=/dev/video-imx390-cam1 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev1 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_1 \
    v4l2src device=/dev/video-imx390-cam2 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev2 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_2 \
    v4l2src device=/dev/video-imx390-cam3 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev3 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_3 \
    tiovxmosaic name=mosaic \
    sink_0::startx="<0>" sink_0::starty="<0>" \
    sink_1::startx="<1920>" sink_1::starty="<0>" \
    sink_2::startx="<0>" sink_2::starty="<1080>" \
    sink_3::startx="<1920>" sink_3::starty="<1080>" ! \
    kmssink sync=false driver-name=tidss -v

    Simple GStreamer pipeline for multi input & output (8 camera):

    gst-launch-1.0 \
    v4l2src device=/dev/video-imx390-cam0 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev0 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_0 \
    v4l2src device=/dev/video-imx390-cam1 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev1 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_1 \
    v4l2src device=/dev/video-imx390-cam2 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev2 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_2 \
    v4l2src device=/dev/video-imx390-cam3 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev3 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_3 \
    v4l2src device=/dev/video-imx390-cam4 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev4 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_4 \
    v4l2src device=/dev/video-imx390-cam5 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev5 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_5 \
    v4l2src device=/dev/video-imx390-cam6 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev6 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_6 \
    v4l2src device=/dev/video-imx390-cam7 ! video/x-bayer, width=1936, height=1100, framerate=30/1, format=rggb12 ! queue leaky=2 ! tiovxisp sink_0::device=/dev/v4l-imx390-subdev7 sensor-name=SENSOR_SONY_IMX390_UB953_D3 dcc-isp-file=/opt/imaging/imx390/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx390/linear/dcc_2a.bin format-msb=11 ! tiovxldc dcc-file=/opt/imaging/imx390/linear/dcc_ldc.bin sensor-name=SENSOR_SONY_IMX390_UB953_D3 sink_0::pool-size=8 c::pool-size=8 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! queue ! mosaic.sink_7 \
    tiovxmosaic name=mosaic \
    sink_0::startx="<0>" sink_0::starty="<0>" sink_0::widths="<640>" sink_0::heights="<360>" \
    sink_1::startx="<640>" sink_1::starty="<0>" sink_1::widths="<640>" sink_1::heights="<360>" \
    sink_2::startx="<1280>" sink_2::starty="<0>" sink_2::widths="<640>" sink_2::heights="<360>" \
    sink_3::startx="<0>" sink_3::starty="<360>" sink_3::widths="<640>" sink_3::heights="<360>" \
    sink_4::startx="<640>" sink_4::starty="<360>" sink_4::widths="<640>" sink_4::heights="<360>" \
    sink_5::startx="<1280>" sink_5::starty="<360>" sink_5::widths="<640>" sink_5::heights="<360>" \
    sink_6::startx="<320>" sink_6::starty="<720>" sink_6::widths="<640>" sink_6::heights="<360>" \
    sink_7::startx="<960>" sink_7::starty="<720>" sink_7::widths="<640>" sink_7::heights="<360>" ! \
    video/x-raw, width=1920, height=1080 ! kmssink driver-name=tidss sync=false force-modesetting=true

    OV5640 YUV sensor

    About this sensor: 2MP sensor with built-in ISP which can transmit raw YUYV frames over CSI lanes. Because this sensor has built-in ISP, binaries are not required to be added in the pipeline.

    SK-TDA4VM, SK-AM68, SK-AM69, AM67: Follow the steps of section 2.1.3. "OV5640 YUV sensor" of the Edge AI SDK to enable this sensor.

    Simple GStreamer pipeline for single input and output:

    gst-launch-1.0 v4l2src device=/dev/video2 ! video/x-raw, width=1920, height=1080, format=UYVY ! kmssink driver-name=tidss sync=false

    USB Camera

    SK-TDA4VM, SK-AM68, SK-AM69, AM67: For more information on the UVC (USB video class) USB cameras that have been validated, see section 2.1.1 "USB Camera" of the Edge AI SDK.

    SK-AM62Ax: For more information on the UVC (USB video class) USB cameras that have been validated, see section 2.1.2 "USB Camera" of the Edge AI SDK.

    Simple GStreamer pipeline for single input & output:

    gst-launch-1.0 v4l2src device="/dev/video-usb-cam0" ! videoconvert ! videoscale ! video/x-raw, width=1280, height=720 ! kmssink sync=false driver-name=tidss

    Simple Gstreamer pipeline for single input and output (save to a file as mp4):

    gst-launch-1.0 v4l2src device="/dev/video-usb-cam0" ! video/x-raw, width=1280, height=720 ! videoconvert ! video/x-raw, format=NV12 ! v4l2h264enc ! h264parse ! mp4mux ! filesink location=out.mp4

    Additional Resources

    GStreamer Troubleshooting FAQ: COMING SOON

    Streaming RTSP source with GStreamer FAQhttps://e2e.ti.com/support/processors-group/processors/f/processors-forum/1461875/faq-sk-am69-how-to-run-gstreamer-pipeline-with-rtsp-source

    Enabling sensors via fusion board FAQhttps://e2e.ti.com/support/processors-group/processors/f/processors-forum/1452909/faq-am67a-enabling-csi2-sensors-via-fusion-board-on-am6x

    ISP Tuning Guide: https://www.ti.com/lit/an/sprad86a/sprad86a.pdf

    DCC Tuning Tool: https://www.ti.com/drr/opn/ADAS-SW-IMAGING

    Thank you,

    Fabiana