# Multi-camera/Multi-client use cases

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html)

The multi-camera/multi-client use cases show scenarios where several camera streams
        are displayed in modes such as picture-in-picture and side by side.

Before you run the use cases, ensure that you complete the preconditions mentioned in
                [GStreamer command-line use cases](https://docs.qualcomm.com/doc/80-70022-50/topic/gstreamer-application-use-cases.html).

### GMSL camera limitation for Dragonwing IQ-8275 and Dragonwing IQ-9075

With the existing software configuration, a single GMSL port supports connection to
                only one GMSL camera on any of its four slots.

- The GMSL Port-0 supports a single Bayer camera.
- The current release supports the OX03f10 Bayer GMSL and OX03f10 YUV GMSL
                    cameras.

Table : Dragonwing IQ-8275 and Dragonwing IQ-9075–GSML port support and
                    limitation

| SoC | GMSL port connection |
| :--- | :--- |
| QCS6490 | Ensure that you connect the MIPI cameras to the CSI slots on the<br>                                Qualcomm Dragonwing™ RB3 Gen 2 Development Kit.<ul class="ul" id="multi-camera-multi-client-use-cases__ul_n2q_5pd_52c"><br>                                    <li class="li">Connect the OV9282 MIPI camera to the CAM 0A slot.</li><br><br>                                    <li class="li">Connect the IMX577 MPI camera to the CAM3 slot.</li><br><br>                                </ul> |
| Dragonwing IQ-8275 | Ensure that you connect the GMSL camera sensors to the Ride SX<br>                                    device.<br><ul class="ul" id="multi-camera-multi-client-use-cases__ul_gmm_mqd_52c"><br>                                    <li class="li">Connect the OX03F10 Bayer GMSL camera to GMSL port 0.</li><br><br>                                    <li class="li">Connect the OX03F10 YUV GMSL cameras to port 1 and port<br>                                        3.</li><br><br>                                </ul> |
| Dragonwing IQ-9075 | <ul class="ul" id="multi-camera-multi-client-use-cases__ul_xhn_zpd_52c"><br>                                    <li class="li">MIPI: Connect four OV9282 MIPI cameras to the CSI<br>                                        slots.</li><br><br>                                    <li class="li">GMSL: Connect the OX03F10 Bayer GMSL camera to GMSL port 0<br>                                        and OX03F10 YUV GMSL cameras to port 2 and port 3.</li><br><br>                                </ul> |

## Two streams—4k AVC MP4, 1080p YUV preview as Client 1 (main camera) and 720p AVC, 720p
        YUV as Client 2 (secondary camera)

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html)

The use cases use two (4k and 1080p) streams from the main camera, and two 720p
        streams from the secondary camera. One stream from each camera is multiplexed and encoded
        while the other pair is displayed.

Table : Multi camera client use cases for encoding and preview

| Use case | Camera (client) |
| :--- | :--- |
| Multiplexed and encoded | <ul class="ul" id="two-streams-each-from-main-camera-4k-avc-mp4-1080p-yuv-preview-as-client-1-and-secondary-camera-720p-avc-720p-yuv-as-client2__ul_mxd_yxd_l2c"><br>                                <li class="li">Main camera–4k AVC MP4</li><br><br>                                <li class="li">Secondary camera–720p AVC</li><br><br>                            </ul> |
| Preview | <ul class="ul" id="two-streams-each-from-main-camera-4k-avc-mp4-1080p-yuv-preview-as-client-1-and-secondary-camera-720p-avc-720p-yuv-as-client2__ul_uk2_cyd_l2c"><br>                                <li class="li">Main camera–1080p YUV</li><br><br>                                <li class="li">Secondary camera–720p YUV</li><br><br>                            </ul> |

Run the use case on the target
            device:

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc_0 video_1::type=preview ! video/x-raw,format=NV12_Q08C,width=3840,height=2160,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=5  ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4" camsrc_0. ! video/x-raw,format=NV12_Q08C,width=1920,height=1080,framerate=30/1 ! waylandsink sync=false qtiqmmfsrc name=camsrc_1 camera=1 video_1::type=preview ! video/x-raw,format=NV12_Q08C,width=1280,height=720,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux2.mp4" camsrc_1. ! video/x-raw, format=NV12_Q08C, width=1280, height=720, framerate=30/1 ! waylandsink sync=falseCopy to clipboard

To stop the use case, use CTRL + C.

Pull recorded content from the device and play content on the Linux host computer.

In the terminal of the host computer, run the following
            commands:

    scp -r root@[DEVICE IP-ADDR]:/opt/mux1.mp4 user1@[HOST IP-ADDR]:/workspaceCopy to clipboard

    scp -r root@[DEVICE IP-ADDR]:/opt/mux2.mp4 user1@[HOST IP-ADDR]:/workspaceCopy to clipboard

You can play the MP4 file and snapshots on a media player and view the preview stream on
            the screen.

The following figure shows the flow of pipeline execution:

Figure : Pipeline for two camera clients–encoding and preview
            
            <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="951" height="361.104001998901367" viewbox="0 0 951 361.104001998901367">
  <g id="Layer_1" data-name="Layer 1">
    <g>
      <rect x=".5" y=".499967575073214" width="950" height="360.10400390625" rx="7.5" ry="7.5" style="fill: #fafafa;"></rect>
      <path d="M943,1c3.8597412109375,0,7,3.14023494720459,7,7v345.104001998901367c0,3.859771728515625-3.1402587890625,7-7,7H8c-3.859771728515625,0-7-3.140228271484375-7-7V8c0-3.85976505279541,3.140228271484375-7,7-7h935M943,0H8C3.581771850585938,0,0,3.581765174865723,0,8v345.104001998901367c0,4.418243408203125,3.581771850585938,8,8,8h935c4.4183349609375,0,8-3.581756591796875,8-8V8c0-4.418234825134277-3.5816650390625-8-8-8h0Z" style="fill: #d2d7e1;"></path>
    </g>
  </g>
  <g id="Layer_2" data-name="Layer 2">
    <g>
      <g>
        <g>
          <rect x="20" y="60.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
          <text transform="translate(73.429718017578125 88.506731033325195)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
        </g>
        <line x1="180" y1="85.000019660727048" x2="198" y2="85.000019660727048" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <g>
          <g>
            <g>
              <rect x="216" y="20.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(250.476600646972656 48.506731033325195)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">v4l2h264enc</tspan></text>
            </g>
            <g>
              <line x1="376" y1="45.000020980834961" x2="395.259033203125" y2="45.000020980834961" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
              <polygon points="394.091796875 48.989084243774414 401 45.000020980834961 394.091796875 41.010953903198242 394.091796875 48.989084243774414"></polygon>
            </g>
            <g>
              <rect x="401" y="20.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(443.207061767578125 48.506731033325195)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
            </g>
            <g>
              <line x1="561" y1="45.000020980834961" x2="580.259033203125" y2="45.000020980834961" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
              <polygon points="579.091796875 48.989084243774414 586 45.000020980834961 579.091796875 41.010953903198242 579.091796875 48.989084243774414"></polygon>
            </g>
            <g>
              <rect x="586" y="20.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(634.621124267578125 48.506731033325195)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">mp4mux</tspan></text>
            </g>
            <g>
              <line x1="746" y1="45.000020980834961" x2="765.259033203125" y2="45.000020980834961" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
              <polygon points="764.091796875 48.989084243774414 771 45.000020980834961 764.091796875 41.010953903198242 764.091796875 48.989084243774414"></polygon>
            </g>
            <g>
              <rect x="771" y="20.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(825.56646728515625 48.506731033325195)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">filesink</tspan></text>
            </g>
          </g>
          <g>
            <rect x="216" y="100.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
            <text transform="translate(252.097694396972656 128.506734848022461)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">waylandsink</tspan></text>
          </g>
        </g>
        <g>
          <polyline points="210.259002685546875 45.000020980834961 198 45.000020980834961 198 128.66688346862793 210.259002685546875 128.66688346862793" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
          <polygon points="209.091827392578125 41.010953903198242 216 45.000020980834961 209.091827392578125 48.989084243774414 209.091827392578125 41.010953903198242"></polygon>
          <polygon points="209.091827392578125 132.65595817565918 216 128.66688346862793 209.091827392578125 124.677824020386652 209.091827392578125 132.65595817565918"></polygon>
        </g>
      </g>
      <g>
        <g>
          <rect x="20" y="220.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
          <text transform="translate(73.429718017578125 248.50672721862793)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
        </g>
        <line x1="180" y1="245.000019660727048" x2="198" y2="245.000019660727048" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <g>
          <g>
            <g>
              <rect x="216" y="180.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(250.476600646972656 208.50672721862793)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">v4l2h264enc</tspan></text>
            </g>
            <g>
              <line x1="376" y1="205.00001335144043" x2="395.259033203125" y2="205.00001335144043" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
              <polygon points="394.091796875 208.98908805847168 401 205.00001335144043 394.091796875 201.010953903198242 394.091796875 208.98908805847168"></polygon>
            </g>
            <g>
              <rect x="401" y="180.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(443.207061767578125 208.50672721862793)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
            </g>
            <g>
              <line x1="561" y1="205.00001335144043" x2="580.259033203125" y2="205.00001335144043" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
              <polygon points="579.091796875 208.98908805847168 586 205.00001335144043 579.091796875 201.010953903198242 579.091796875 208.98908805847168"></polygon>
            </g>
            <g>
              <rect x="586" y="180.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(634.621124267578125 208.50672721862793)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">mp4mux</tspan></text>
            </g>
            <g>
              <line x1="746" y1="205.00001335144043" x2="765.259033203125" y2="205.00001335144043" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
              <polygon points="764.091796875 208.98908805847168 771 205.00001335144043 764.091796875 201.010953903198242 764.091796875 208.98908805847168"></polygon>
            </g>
            <g>
              <rect x="771" y="180.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
              <text transform="translate(825.56646728515625 208.50672721862793)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">filesink</tspan></text>
            </g>
          </g>
          <g>
            <rect x="216" y="260.000019660727048" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
            <text transform="translate(252.097694396972656 288.50672721862793)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">waylandsink</tspan></text>
          </g>
        </g>
        <g>
          <polyline points="210.259002685546875 205.00001335144043 198 205.00001335144043 198 288.666898727416992 210.259002685546875 288.666898727416992" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
          <polygon points="209.091827392578125 201.010953903198242 216 205.00001335144043 209.091827392578125 208.98908805847168 209.091827392578125 201.010953903198242"></polygon>
          <polygon points="209.091827392578125 292.655942916870117 216 288.666898727416992 209.091827392578125 284.677824020386652 209.091827392578125 292.655942916870117"></polygon>
        </g>
      </g>
    </g>
    <g>
      <text transform="translate(852.50982666015625 342.091520309448242)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
      <rect x="832.258819580078125" y="330.000019660728867" width="16" height="16" rx="1.999999999999972" ry="1.999999999999972" style="fill: #007884;"></rect>
    </g>
  </g>
</svg>

## Two 720p streams—one from each camera with side by side stitching for display

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html)

The pipeline shows two 720p streams from the main camera and secondary camera
        respectively. Both the streams are composed side by side and displayed.

Run the use case on the target
            device:

    gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<640, 360>" sink_1::position="<640, 0>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink enable-last-sample=false fullscreen=true qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.Copy to clipboard

The composed streams from the camera are displayed.

To stop the use case, use CTRL + C.

The following figure shows the flow of pipeline execution:

Figure : Two streams from primary and secondary cameras–side by side display
            
            <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="580" height="206" viewbox="0 0 580 206">
  <g id="Layer_1" data-name="Layer 1">
    <g>
      <rect x=".5" y=".499893188476562" width="579" height="205" rx="7.499999999999999" ry="7.499999999999999" style="fill: #fafafa;"></rect>
      <path d="M572,1c3.85986328125,0,7,3.140153884887695,7,7v190c0,3.859848022460938-3.14013671875,7-7,7H8c-3.859832763671875,0-7-3.140151977539062-7-7V8c0-3.859846115112305,3.140167236328125-7,7-7h564M572,0H8C3.581695556640625,0,0,3.581692695617676,0,8v190c0,4.418304443359375,3.581695556640625,8,8,8h564c4.4183349609375,0,8-3.581695556640625,8-8V8c0-4.418307304382324-3.5816650390625-8-8-8h0Z" style="fill: #d2d7e1;"></path>
    </g>
    <g>
      <g>
        <text transform="translate(390.4920654296875 182.091506958007812)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Qualcomm </tspan></text>
        <rect x="370.241066913160466" y="170" width="16" height="16" rx="2" ry="2" style="fill: #2a2aea;"></rect>
      </g>
      <g>
        <text transform="translate(489.07391357421875 182.091506958007812)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
        <rect x="468.822848326017265" y="170" width="16" height="16" rx="2" ry="2" style="fill: #007884;"></rect>
      </g>
    </g>
  </g>
  <g id="Layer_2" data-name="Layer 2">
    <g>
      <rect x="215.5" y="61.833435058272698" width="160" height="50" rx="4" ry="4" style="fill: #2a2aea;"></rect>
      <text transform="translate(246.640655517578125 90.340141296386719)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtivcomposer</tspan></text>
    </g>
    <g>
      <line x1="375.5" y1="86.83343505859375" x2="394.759033203125" y2="86.83343505859375" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
      <polygon points="393.591796875 90.822502136230469 400.5 86.83343505859375 393.591796875 82.844367980957031 393.591796875 90.822502136230469"></polygon>
    </g>
    <g>
      <rect x="400.5" y="61.833435058272698" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
      <text transform="translate(436.597686767578125 90.340141296386719)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">waylandsink</tspan></text>
    </g>
    <g>
      <polyline points="209.759033203125 99.33343505859375 197.5 99.33343505859375 197.5 128.6668701171875 179.5 128.6668701171875" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
      <polygon points="208.591796875 95.344367980956122 215.5 99.33343505859375 208.591796875 103.322502136230469 208.591796875 95.344367980956122"></polygon>
    </g>
    <g>
      <polyline points="179.5 45 197.5 45 197.5 74.33343505859375 209.759033203125 74.33343505859375" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
      <polygon points="208.591796875 78.322502136230469 215.5 74.33343505859375 208.591796875 70.344367980957031 208.591796875 78.322502136230469"></polygon>
    </g>
    <g>
      <rect x="19.5" y="20" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
      <text transform="translate(72.929718017578125 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
    </g>
    <g>
      <rect x="19.5" y="100" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
      <text transform="translate(72.929718017578125 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
    </g>
  </g>
</svg>

## Two 720p streams—one from each camera with side by side stitching for encode and RTSP
        streaming

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html)

The pipeline shows two 720p streams from the main camera and secondary camera
        respectively. Both are composed side by side, and then duplicated and encoded. One is
        multiplexed and saved to a file while the other is streamed through RTSP.

Run the RTSP server in a separate console on the target device with
                `udpsrc`. You can also run it in the background as a service:

    gst-rtsp-server -p 8900 -a <IP address of device> -m /live "( udpsrc name=pay0 port=8554 caps=\"application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96\" )"Copy to clipboard

Run the pipeline in the same or another console on the target
            device:

    gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<640, 360>" sink_1::position="<640, 0>" sink_1::dimensions="<640, 360>" mixer. ! queue ! tee name=t_split t_split. ! queue ! video/x-raw,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/opt/mux.mp4 t_split. ! queue ! video/x-raw,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse config-interval=-1 ! rtph264pay pt=96 ! udpsink host=127.0.0.1 port=8554 qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.Copy to clipboard

To stop the use case,  use CTRL + C.

Pull the recorded content from the device and play content on the Linux host
            computer.

In the terminal of the host computer, run the following command:

    scp root@<IP address of target device>:/opt/mux.mp4 <destination directory>Copy to clipboard

You can play the MP4 file on a media player. The streamed video is displayed as an RTSP
            stream on the host computer. See [RTSP stream on host computer](https://docs.qualcomm.com/doc/80-70022-50/topic/camera-and-video-encode.html#one_stream_1080p_avc_rtsp_from_live_source__section_ayq_2nh_pyb).

The following figure shows the flow of the pipeline execution:

Figure : Pipeline for two 720p camera streams–side by side display, encoded, and streamed
                through RTSP
            
            <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1192" height="211" viewbox="0 0 1192 211">
  <g id="Layer_1" data-name="Layer 1">
    <g>
      <rect x=".5" y=".499893188476562" width="1191" height="210" rx="7.499999999999996" ry="7.499999999999996" style="fill: #fafafa;"></rect>
      <path d="M1184,1c3.85986328125,0,7,3.140153884887695,7,7v195c0,3.859848022460938-3.14013671875,7-7,7H8c-3.859846115112305,0-7-3.140151977539062-7-7V8c0-3.859846115112305,3.140153884887695-7,7-7h1176M1184,0H8C3.581692218780518,0,0,3.581692218780518,0,8v195c0,4.418304443359375,3.581692218780518,8,8,8h1176c4.418334960939319,0,8-3.581695556640625,8-8V8c0-4.418307781219482-3.581665039060681-8-8-8h0Z" style="fill: #d2d7e1;"></path>
    </g>
    <g>
      <g>
        <text transform="translate(994.9276123046875 187.091476440429688)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Qualcomm </tspan></text>
        <rect x="974.676634133211337" y="175" width="16" height="16" rx="2" ry="2" style="fill: #2a2aea;"></rect>
      </g>
      <g>
        <text transform="translate(1093.50946044921875 187.091476440429688)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
        <rect x="1073.258415546068136" y="175" width="16" height="16" rx="2" ry="2" style="fill: #007884;"></rect>
      </g>
    </g>
  </g>
  <g id="Layer_2" data-name="Layer 2">
    <g>
      <g>
        <line x1="677" y1="50" x2="696.259033203125" y2="50" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="695.091796875 53.989063262939453 702 50 695.091796875 46.010936737060547 695.091796875 53.989063262939453"></polygon>
      </g>
      <g>
        <rect x="702" y="25" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(734.207061767578125 53.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
      </g>
      <g>
        <line x1="842" y1="50" x2="861.259033203125" y2="50" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="860.091796875 53.989063262939453 867 50 860.091796875 46.010936737060547 860.091796875 53.989063262939453"></polygon>
      </g>
      <g>
        <rect x="867" y="25" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(905.62109375 53.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">mp4mux</tspan></text>
      </g>
      <g>
        <line x1="1007" y1="50" x2="1026.259033203130457" y2="50" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="1025.091796875 53.989063262939453 1032 50 1025.091796875 46.010936737060547 1025.091796875 53.989063262939453"></polygon>
      </g>
      <g>
        <rect x="1032" y="25" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
        <text transform="translate(1076.5665283203125 53.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">filesink</tspan></text>
      </g>
      <g>
        <g>
          <rect x="537" y="25" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
          <text transform="translate(561.476593017578125 53.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">v4l2h264enc</tspan></text>
        </g>
        <g>
          <rect x="537" y="105" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
          <text transform="translate(561.476593017578125 133.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">v4l2h264enc</tspan></text>
        </g>
      </g>
      <g>
        <line x1="677" y1="130" x2="696.259033203125" y2="130" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="695.091796875 133.989059448242188 702 130 695.091796875 126.010932922363281 695.091796875 133.989059448242188"></polygon>
      </g>
      <g>
        <rect x="702" y="105" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(734.207061767578125 133.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
      </g>
      <g>
        <line x1="842" y1="130" x2="861.259033203125" y2="130" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="860.091796875 133.989059448242188 867 130 860.091796875 126.010932922363281 860.091796875 133.989059448242188"></polygon>
      </g>
      <g>
        <rect x="867" y="105" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(896.68359375 133.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">rtph264pay</tspan></text>
      </g>
      <g>
        <line x1="1007" y1="130" x2="1026.259033203130457" y2="130" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="1025.091796875 133.989059448242188 1032 130 1025.091796875 126.010932922363281 1025.091796875 133.989059448242188"></polygon>
      </g>
      <g>
        <rect x="1032" y="105" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
        <text transform="translate(1074.0548095703125 133.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">udpsink</tspan></text>
      </g>
      <g>
        <rect x="196" y="65" width="140" height="50" rx="4" ry="4" style="fill: #2a2aea;"></rect>
        <text transform="translate(217.140655517578125 93.506710052490234)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtivcomposer</tspan></text>
      </g>
      <g>
        <line x1="336" y1="90" x2="355.259002685546875" y2="90" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="354.091827392578125 93.989067077636719 361 90 354.091827392578125 86.010932922363281 354.091827392578125 93.989067077636719"></polygon>
      </g>
      <g>
        <rect x="361" y="65" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
        <text transform="translate(419.910186767578125 93.506710052490234)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">tee</tspan></text>
      </g>
      <g>
        <polyline points="190.259017944335938 102.574180603027344 178 102.574180603027344 178 130 160 130" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="189.091827392578125 98.585121154785156 196 102.574180603027344 189.091827392578125 106.563247680664972 189.091827392578125 98.585121154785156"></polygon>
      </g>
      <g>
        <polyline points="160 50 178 50 178 77.574180603027344 190.259017944335938 77.574180603027344" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="189.091827392578125 81.563247680664062 196 77.574180603027344 189.091827392578125 73.585121154785156 189.091827392578125 81.563247680664062"></polygon>
      </g>
      <g>
        <polyline points="531.259033203125 50 519 50 519 82.840164184570312 501 82.840164184570312" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="530.091796875 46.010936737060547 537 50 530.091796875 53.989063262939453 530.091796875 46.010936737060547"></polygon>
      </g>
      <g>
        <polyline points="501 100.407463073730469 519 100.407463073730469 519 130 531.259033203125 130" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="530.091796875 133.989059448242188 537 130 530.091796875 126.010932922363281 530.091796875 133.989059448242188"></polygon>
      </g>
      <g>
        <rect x="20" y="25" width="140" height="50" rx="3.999999999999999" ry="3.999999999999999" style="fill: #007884;"></rect>
        <text transform="translate(63.429718017578125 53.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
      </g>
      <g>
        <rect x="20" y="105" width="140" height="50" rx="3.999999999999999" ry="3.999999999999999" style="fill: #007884;"></rect>
        <text transform="translate(63.429718017578125 133.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
      </g>
    </g>
  </g>
</svg>

## Two 720p streams—one from each camera with picture-in-picture composition and sent to
        display

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html)

The use case uses two 720p streams from the main camera and secondary camera
        respectively. Both are composed as picture-in-picture and displayed.

Run the use case on the target
            device:

    gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink enable-last-sample=false fullscreen=true qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.Copy to clipboard

The composed streams from the camera (picture-in-picture) are displayed.

To stop the use case,  use CTRL + C.

The following figure shows the flow of the pipeline execution:

Figure : Pipeline for two 720p streams–picture-in-picture display
            
            <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="580" height="206" viewbox="0 0 580 206">
  <g id="Layer_1" data-name="Layer 1">
    <g>
      <rect x=".5" y=".499893188476562" width="579" height="205" rx="7.499999999999999" ry="7.499999999999999" style="fill: #fafafa;"></rect>
      <path d="M572,1c3.85986328125,0,7,3.140153884887695,7,7v190c0,3.859848022460938-3.14013671875,7-7,7H8c-3.859832763671875,0-7-3.140151977539062-7-7V8c0-3.859846115112305,3.140167236328125-7,7-7h564M572,0H8C3.581695556640625,0,0,3.581692695617676,0,8v190c0,4.418304443359375,3.581695556640625,8,8,8h564c4.4183349609375,0,8-3.581695556640625,8-8V8c0-4.418307304382324-3.5816650390625-8-8-8h0Z" style="fill: #d2d7e1;"></path>
    </g>
    <g>
      <g>
        <text transform="translate(383.42822265625 182.091476440429688)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Qualcomm </tspan></text>
        <rect x="363.177256542079704" y="170" width="16" height="16" rx="2" ry="2" style="fill: #2a2aea;"></rect>
      </g>
      <g>
        <text transform="translate(482.01007080078125 182.091476440429688)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
        <rect x="461.759037954936503" y="170" width="16" height="16" rx="2" ry="2" style="fill: #007884;"></rect>
      </g>
    </g>
  </g>
  <g id="Layer_2" data-name="Layer 2">
    <g>
      <rect x="215.5" y="61.833435058272698" width="160" height="50" rx="4" ry="4" style="fill: #2a2aea;"></rect>
      <text transform="translate(246.640655517578125 90.340141296386719)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtivcomposer</tspan></text>
    </g>
    <g>
      <line x1="375.5" y1="86.83343505859375" x2="394.759033203125" y2="86.83343505859375" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
      <polygon points="393.591796875 90.822502136230469 400.5 86.83343505859375 393.591796875 82.844367980957031 393.591796875 90.822502136230469"></polygon>
    </g>
    <g>
      <rect x="400.5" y="61.833435058272698" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
      <text transform="translate(436.597686767578125 90.340141296386719)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">waylandsink</tspan></text>
    </g>
    <g>
      <polyline points="209.759033203125 99.33343505859375 197.5 99.33343505859375 197.5 128.6668701171875 179.5 128.6668701171875" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
      <polygon points="208.591796875 95.344367980956122 215.5 99.33343505859375 208.591796875 103.322502136230469 208.591796875 95.344367980956122"></polygon>
    </g>
    <g>
      <polyline points="179.5 45 197.5 45 197.5 74.33343505859375 209.759033203125 74.33343505859375" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
      <polygon points="208.591796875 78.322502136230469 215.5 74.33343505859375 208.591796875 70.344367980957031 208.591796875 78.322502136230469"></polygon>
    </g>
    <g>
      <rect x="19.5" y="20" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
      <text transform="translate(72.929718017578125 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
    </g>
    <g>
      <rect x="19.5" y="100" width="160" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
      <text transform="translate(72.929718017578125 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
    </g>
  </g>
</svg>

## Two 720p streams—one from each camera with picture-in-picture composition for encode and
        RTSP streaming

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-multi-client-use-cases.html)

The use case uses two 720p streams from the main camera and secondary camera
        respectively. Both are composed as picture-in-picture, and then duplicated and encoded. One
        stream is multiplexed and saved to a file and the other is streamed through
        RTSP.

Run the use case:

- Run RTSP server in a separate console on the target device with
                        `udpsrc`. You can run it in the background as a
                    service:

        gst-rtsp-server -p 8900 -a <IP address of device> -m /live "( udpsrc name=pay0 port=8554 caps=\"application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96\" )"Copy to clipboard
- Run the pipeline in same or another console on the target
                    device:

        gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! tee name=t_split t_split. ! queue ! video/x-raw,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/opt/mux.mp4 t_split. ! queue ! video/x-raw,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse config-interval=-1 ! rtph264pay pt=96 ! udpsink host=<ip_address> port=8554 qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.Copy to clipboard
- To stop the use case,  use CTRL + C.

    Pull the recorded content from the device and play content on the Linux host
                    computer.

    In the terminal of the host computer run the following command:

        scp root@<IP address of target device>:/opt/ <destination directory>Copy to clipboard

You can play the MP4 file on a media player. The video is streamed over RTSP on a host
            computer. See [RTSP stream on host computer](https://docs.qualcomm.com/doc/80-70022-50/topic/camera-and-video-encode.html#one_stream_1080p_avc_rtsp_from_live_source__section_ayq_2nh_pyb).

The following figure shows the flow of the pipeline execution:

Figure : Pipeline for two 720p camera streams–picture-in-picture display, encoded, and
                streamed through RTSP
            
            <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1191" height="206" viewbox="0 0 1191 206">
  <g id="Layer_1" data-name="Layer 1">
    <g>
      <rect x=".5" y=".499893188476562" width="1190" height="205" rx="7.499999999999914" ry="7.499999999999914" style="fill: #fafafa;"></rect>
      <path d="M1183,1c3.85986328125,0,7,3.140153884887695,7,7v190c0,3.859848022460938-3.14013671875,7-7,7H8c-3.859846115112305,0-7-3.140151977539062-7-7V8c0-3.859846115112305,3.140153884887695-7,7-7h1175M1183,0H8C3.581692695617676,0,0,3.581692695617676,0,8v190c0,4.418304443359375,3.581692695617676,8,8,8h1175c4.418334960939319,0,8-3.581695556640625,8-8V8c0-4.418307304382324-3.581665039060681-8-8-8h0Z" style="fill: #d2d7e1;"></path>
    </g>
    <g>
      <g>
        <text transform="translate(993.92803955078125 182.091506958007812)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Qualcomm </tspan></text>
        <rect x="973.67705536883841" y="170" width="16" height="16" rx="1.999999999999886" ry="1.999999999999886" style="fill: #2a2aea;"></rect>
      </g>
      <g>
        <text transform="translate(1092.5098876953125 182.091506958007812)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
        <rect x="1072.258836781695209" y="170" width="16" height="16" rx="2" ry="2" style="fill: #007884;"></rect>
      </g>
    </g>
  </g>
  <g id="Layer_2" data-name="Layer 2">
    <g>
      <g>
        <line x1="676" y1="45" x2="695.259033203125" y2="45" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="694.091796875 48.989063262939453 701 45 694.091796875 41.010936737060547 694.091796875 48.989063262939453"></polygon>
      </g>
      <g>
        <rect x="701" y="20" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(733.207061767578125 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
      </g>
      <g>
        <line x1="841" y1="45" x2="860.259033203125" y2="45" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="859.091796875 48.989063262939453 866 45 859.091796875 41.010936737060547 859.091796875 48.989063262939453"></polygon>
      </g>
      <g>
        <rect x="866" y="20" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(904.62109375 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">mp4mux</tspan></text>
      </g>
      <g>
        <line x1="1006" y1="45" x2="1025.259033203130457" y2="45" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="1024.091796875 48.989063262939453 1031 45 1024.091796875 41.010936737060547 1024.091796875 48.989063262939453"></polygon>
      </g>
      <g>
        <rect x="1031" y="20" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
        <text transform="translate(1075.5665283203125 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">filesink</tspan></text>
      </g>
      <g>
        <g>
          <rect x="536" y="20" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
          <text transform="translate(560.476593017578125 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">v4l2h264enc</tspan></text>
        </g>
        <g>
          <rect x="536" y="100" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
          <text transform="translate(560.476593017578125 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">v4l2h264enc</tspan></text>
        </g>
      </g>
      <g>
        <line x1="676" y1="125" x2="695.259033203125" y2="125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="694.091796875 128.989059448242188 701 125 694.091796875 121.010932922363281 694.091796875 128.989059448242188"></polygon>
      </g>
      <g>
        <rect x="701" y="100" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(733.207061767578125 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
      </g>
      <g>
        <line x1="841" y1="125" x2="860.259033203125" y2="125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="859.091796875 128.989059448242188 866 125 859.091796875 121.010932922363281 859.091796875 128.989059448242188"></polygon>
      </g>
      <g>
        <rect x="866" y="100" width="140" height="50" rx="3.999999999999991" ry="3.999999999999991" style="fill: #007884;"></rect>
        <text transform="translate(895.68359375 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">rtph264pay</tspan></text>
      </g>
      <g>
        <line x1="1006" y1="125" x2="1025.259033203130457" y2="125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="1024.091796875 128.989059448242188 1031 125 1024.091796875 121.010932922363281 1024.091796875 128.989059448242188"></polygon>
      </g>
      <g>
        <rect x="1031" y="100" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
        <text transform="translate(1073.0548095703125 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">udpsink</tspan></text>
      </g>
      <g>
        <rect x="195" y="60" width="140" height="50" rx="4" ry="4" style="fill: #2a2aea;"></rect>
        <text transform="translate(216.140655517578125 88.506710052490234)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtivcomposer</tspan></text>
      </g>
      <g>
        <line x1="335" y1="85" x2="354.259002685546875" y2="85" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="353.091827392578125 88.989067077636719 360 85 353.091827392578125 81.010932922363281 353.091827392578125 88.989067077636719"></polygon>
      </g>
      <g>
        <rect x="360" y="60" width="140" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
        <text transform="translate(418.910186767578125 88.506710052490234)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">tee</tspan></text>
      </g>
      <g>
        <polyline points="189.259017944335938 97.574180603027344 177 97.574180603027344 177 125 159 125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="188.091827392578125 93.585121154785156 195 97.574180603027344 188.091827392578125 101.563247680664972 188.091827392578125 93.585121154785156"></polygon>
      </g>
      <g>
        <polyline points="159 45 177 45 177 72.574180603027344 189.259017944335938 72.574180603027344" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="188.091827392578125 76.563247680664062 195 72.574180603027344 188.091827392578125 68.585121154785156 188.091827392578125 76.563247680664062"></polygon>
      </g>
      <g>
        <polyline points="530.259033203125 45 518 45 518 77.840164184570312 500 77.840164184570312" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="529.091796875 41.010936737060547 536 45 529.091796875 48.989063262939453 529.091796875 41.010936737060547"></polygon>
      </g>
      <g>
        <polyline points="500 95.407463073730469 518 95.407463073730469 518 125 530.259033203125 125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="529.091796875 128.989059448242188 536 125 529.091796875 121.010932922363281 529.091796875 128.989059448242188"></polygon>
      </g>
      <g>
        <rect x="19" y="20" width="140" height="50" rx="3.999999999999999" ry="3.999999999999999" style="fill: #007884;"></rect>
        <text transform="translate(62.429718017578125 48.506711006164551)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
      </g>
      <g>
        <rect x="19" y="100" width="140" height="50" rx="3.999999999999999" ry="3.999999999999999" style="fill: #007884;"></rect>
        <text transform="translate(62.429718017578125 128.5067138671875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">camsrc</tspan></text>
      </g>
    </g>
  </g>
</svg>

### Related information

- [Multi-camera streaming](https://docs.qualcomm.com/doc/80-70022-50/topic/gst-multi-camera-stream-example.html)
- [Multi-camera streaming using Python](https://docs.qualcomm.com/doc/80-70022-50/topic/multi-camera-streaming-python-sample-app.html)

Last Published: Feb 20, 2026

[Previous Topic
Video encode and decode](https://docs.qualcomm.com/bundle/publicresource/80-70022-50/topics/camera-and-video-encode.md) [Next Topic
Transform and Transcode use cases](https://docs.qualcomm.com/bundle/publicresource/80-70022-50/topics/transform-and-transcode-use-cases.md)