# qtivcomposer

Source: [https://docs.qualcomm.com/doc/80-70022-50/topic/qtivcomposer.html](https://docs.qualcomm.com/doc/80-70022-50/topic/qtivcomposer.html)

The qtivcomposer plugin uses the GPU hardware to merge/mix several input video
        streams into a single output stream.

Note: In a live source setup using a qtivcomposer, long-duration
            testing indicated that if input buffers don't arrive at the expected intervals, the
            composer may produce duplicate output frames. When this duplication persists across
            consecutive frames, it can create a visual impression that the video has frozen, even
            though the buffers are continuously generated and processed. This behavior suggests that
            the irregular buffer timing can disrupt normal frame generation which result in
            misleading playback artifacts.

The pad properties determine the composition of the input buffers (for each stream) in
            the output buffer.

The following table lists a few common pad properties of qtivcomposer. For
                    more information, see [Table :  Pad properties of qtivcomposer](https://docs.qualcomm.com/doc/80-70022-50/topic/qtivcomposer.html#qtivcomposer__table_hzl_mcn_myb).

| Property | Usage |
| --- | --- |
| Position | Sets the X and Y axes placement of each input frame within the<br>                                output. |
| Crop | Sets the optional crop for the source. |
| Dimensions | Upscales/downscales the frames. |
| Rotate | Rotates the frames at right angles |
| <ul class="ul" id="qtivcomposer__ul_vyb_2dp_tbc"><br>                                    <li class="li">Flip-horizontal</li><br><br>                                    <li class="li">Flip-vertical</li><br><br>                                </ul> | Flips the frames horizontally and vertically. |
| Alpha | Adds the alpha blending value to the frames. |
| Z order | Changes the order of the frames.<br>By default, the frames are<br>                                    organized in the order in which the sink pads are created. For<br>                                    example, sink\_0, and sink\_1. |

The figure shows the GStreamer pipeline using qtivcomposer that's working with several
            video sources.

Figure : Pipeline with qtivcomposer
            
            <!--?xml version="1.0" encoding="UTF-8"?-->
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="899.999984741210938" height="484.737319946289062" viewbox="0 0 899.999984741210938 484.737319946289062">
  <g>
    <rect x=".499801635742188" y=".499893188476562" width="899" height="483.73779296875" rx="7.499999999999943" ry="7.499999999999943" style="fill: #fafafa;"></rect>
    <path d="M891.999984741210938,1c3.85980224609375,0,7,3.140228271484375,7,7v468.737319946289062c0,3.85980224609375-3.14019775390625,7-7,7H8c-3.859771728515625,0-7-3.14019775390625-7-7V8c0-3.859771728515625,3.140228271484375-7,7-7h883.999984741210938M891.999984741210938,0H8C3.581771850585938,0,0,3.5816650390625,0,8v468.737319946289062c0,4.4183349609375,3.581771850585938,8,8,8h883.999984741210938c4.418212890625,0,8-3.5816650390625,8-8V8c0-4.4183349609375-3.581787109375-8-8-8h0Z" style="fill: #d2d7e1;"></path>
  </g>
  <text transform="translate(419.851577758789062 31.191909790039062)" style="font-family: Roboto-Medium, Roboto; font-size: 16px; font-weight: 500;"><tspan x="0" y="0">GST BIN</tspan></text>
  <g>
    <rect x="565.743238849987392" y="52.593461639761699" width="265.033420606203435" height="115.626108645134082" rx="4" ry="4" style="fill: #007884;"></rect>
    <text transform="translate(661.779739379882812 72.265579223632812)" style="fill: #fff; font-family: Roboto-Medium, Roboto; font-size: 16px; font-weight: 500;"><tspan x="0" y="0">GstBuffer </tspan></text>
    <text transform="translate(578.438796997070312 102.281997680664062)" style="fill: #fff; font-size: 16px;"><tspan x="0" y="0" style="font-family: Roboto-Medium, Roboto; font-weight: 500;">+ GstMemory:</tspan><tspan x="100.609375" y="0" xml:space="preserve" style="font-family: Roboto-Regular, Roboto;"> Image </tspan></text>
    <text transform="translate(578.743362426757812 135.624801635742188)" style="fill: #fff; font-size: 16px;"><tspan x="0" y="0" style="font-family: Roboto-Medium, Roboto; font-weight: 500;">+ GstVideoMeta:</tspan><tspan x="119.125" y="0" style="font-family: Roboto-Regular, Roboto;"> </tspan><tspan style="font-family: Roboto-Regular, Roboto;"><tspan x="0" y="19.2001953125" style="letter-spacing: 2.00244140625em;">	</tspan><tspan x="36" y="19.2001953125">Describes the raw video data</tspan></tspan></text>
    <line x1="565.743238849987392" y1="82.598004696085809" x2="830.776659456190828" y2="82.598004696085809" style="fill: none; stroke: #b3b7bf; stroke-miterlimit: 10;"></line>
    <line x1="565.743238849987392" y1="112.622602445712801" x2="830.776659456190828" y2="112.622602445712801" style="fill: none; stroke: #b3b7bf; stroke-miterlimit: 10;"></line>
  </g>
  <g>
    <rect x="565.743238849987392" y="313.111270779554616" width="265.033420606203435" height="115.626108645134082" rx="4" ry="4" style="fill: #007884;"></rect>
    <text transform="translate(661.779739379882812 332.783401489257812)" style="fill: #fff; font-family: Roboto-Medium, Roboto; font-size: 16px; font-weight: 500;"><tspan x="0" y="0">GstBuffer </tspan></text>
    <text transform="translate(578.438796997070312 362.799819946289062)" style="fill: #fff; font-size: 16px;"><tspan x="0" y="0" style="font-family: Roboto-Medium, Roboto; font-weight: 500;">+ GstMemory:</tspan><tspan x="100.609375" y="0" xml:space="preserve" style="font-family: Roboto-Regular, Roboto;"> Image </tspan></text>
    <text transform="translate(578.743362426757812 396.142593383789062)" style="fill: #fff; font-size: 16px;"><tspan x="0" y="0" style="font-family: Roboto-Medium, Roboto; font-weight: 500;">+ GstVideoMeta:</tspan><tspan x="119.125" y="0" style="font-family: Roboto-Regular, Roboto;"> </tspan><tspan style="font-family: Roboto-Regular, Roboto;"><tspan x="0" y="19.2001953125" style="letter-spacing: 2.00244140625em;">	</tspan><tspan x="36" y="19.2001953125">Describes the raw video data</tspan></tspan></text>
    <line x1="565.743238849987392" y1="343.115813835880545" x2="830.776659456190828" y2="343.115813835880545" style="fill: none; stroke: #b3b7bf; stroke-miterlimit: 10;"></line>
    <line x1="565.743238849987392" y1="373.140411585507536" x2="830.776659456190828" y2="373.140411585507536" style="fill: none; stroke: #b3b7bf; stroke-miterlimit: 10;"></line>
  </g>
  <g>
    <line x1="698.259963989257812" y1="169.002700805664972" x2="698.259933471679688" y2="192.563034057617188" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="694.270889282226562 191.395828247070312 698.259933471679688 198.304000854492188 702.249008178710938 191.395828247070312 694.270889282226562 191.395828247070312"></polygon>
  </g>
  <g>
    <line x1="565.743240356445312" y1="358.608535766601562" x2="496.961227416992188" y2="358.608474731445312" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="498.12841796875 354.619461059570312 491.220245361328125 358.608474731445312 498.12841796875 362.597549438476562 498.12841796875 354.619461059570312"></polygon>
  </g>
  <text transform="translate(284.649059295654297 174.665420532226562)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">video/x-raw</tspan><tspan x="-95.2265625" y="28">width=1920, height=1080, format=YUV</tspan></text>
  <text transform="translate(656.592453002929688 213.771804809570312)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">video/x-raw</tspan><tspan x="-.17578125" y="19.2001953125">width=1920</tspan></text>
  <text transform="translate(653.807296752929688 259.625381469726562)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">height=1080</tspan><tspan x=".95703125" y="19.2001953125">format=YUV</tspan></text>
  <text transform="translate(281.532150268554688 282.991409301757812)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">video/x-raw</tspan><tspan x="-91.734375" y="28">width=640, height=360, format=BGRA</tspan></text>
  <text transform="translate(280.805667877197266 66.266433715820312)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">video/x-raw</tspan><tspan x="-91.0078125" y="28">width=1280, height=720, format=RGB</tspan></text>
  <text transform="translate(285.481388092041016 398.340591430664062)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">video/x-raw</tspan><tspan x="-90.734375" y="28">width=320, height=180, format=YUV2</tspan></text>
  <g>
    <line x1="636.264144897460938" y1="240.665420532226562" x2="754.514785766601562" y2="240.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="753.347579956054688 244.654495239257812 760.255783081054688 240.665420532226562 753.347579956054688 236.676345825195312 753.347579956054688 244.654495239257812"></polygon>
  </g>
  <rect x="516.264136842230073" y="215.665420532224744" width="120" height="50" rx="4" ry="4" style="fill: #2a2aea;"></rect>
  <text transform="translate(527.404678344726562 245.341049194335938)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtivcomposer</tspan></text>
  <rect x="760.255761463949966" y="215.665420532224744" width="120" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
  <text transform="translate(794.822128295898438 245.341049194335938)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">filesink</tspan></text>
  <g>
    <polyline points="510.281967163085938 226.698745727539062 489.720962524414062 226.698745727539062 489.720962524414062 75.665420532226562 170.000007629394531 75.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
    <polygon points="509.114761352539062 222.709671020507812 516.022964477539062 226.698745727539062 509.114761352539062 230.687820434570312 509.114761352539062 222.709671020507812"></polygon>
  </g>
  <g>
    <polyline points="510.281967163085938 236.698745727539062 475.418975830078125 236.698745727539062 475.418975830078125 185.665420532226562 170.000007629394531 185.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
    <polygon points="509.114761352539062 232.709671020507812 516.022964477539062 236.698745727539062 509.114761352539062 240.687820434570312 509.114761352539062 232.709671020507812"></polygon>
  </g>
  <g>
    <polyline points="510.281967163085938 246.698745727539062 475.418975830078125 246.698745727539062 475.418975830078125 295.665420532226562 170.000007629394531 295.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
    <polygon points="509.114761352539062 242.709671020507812 516.022964477539062 246.698745727539062 509.114761352539062 250.687820434570312 509.114761352539062 242.709671020507812"></polygon>
  </g>
  <g>
    <polyline points="510.523147583007812 256.698745727539062 489.820419311523438 256.698745727539062 489.5792236328125 405.665420532226562 170.000007629394531 405.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
    <polygon points="509.355972290039062 252.709671020507812 516.264144897460938 256.698745727539062 509.355972290039062 260.687820434570312 509.355972290039062 252.709671020507812"></polygon>
  </g>
  <g>
    <rect x="20.000010172530892" y="50.665420532224744" width="150" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
    <text transform="translate(41.972869873046875 80.341033935546875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Video source 0</tspan></text>
  </g>
  <g>
    <rect x="20.000010172530892" y="160.665420532224744" width="150" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
    <text transform="translate(41.972869873046875 190.341033935546875)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Video source 1</tspan></text>
  </g>
  <g>
    <rect x="20.000010172530892" y="270.665420532224744" width="150" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
    <text transform="translate(34.062713623046875 300.341018676757812)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Video source N-1</tspan></text>
  </g>
  <g>
    <rect x="20.000010172530892" y="380.665420532224744" width="150" height="50" rx="4" ry="4" style="fill: #007884;"></rect>
    <text transform="translate(34.062713623046875 410.341049194335938)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Video source N-2</tspan></text>
  </g>
  <g>
    <line x1="95.000015258789062" y1="215.665420532226562" x2="95.000015258789062" y2="218.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <line x1="95.000015258789062" y1="221.415420532226562" x2="95.000015258789062" y2="261.290420532226562" style="fill: none; stroke: #000; stroke-dasharray: 5.5 2.75; stroke-miterlimit: 10;"></line>
    <line x1="95.000015258789062" y1="262.665420532226562" x2="95.000015258789062" y2="265.665420532226562" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
  </g>
  <g>
    <g>
      <text transform="translate(696.707138061523438 460.82879638671875)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Qualcomm </tspan></text>
      <rect x="676.456116407745867" y="448.737319946289062" width="16" height="16" rx="2" ry="2" style="fill: #2a2aea;"></rect>
    </g>
    <g>
      <text transform="translate(795.288925170898438 460.82879638671875)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
      <rect x="775.037897820606304" y="448.737319946289062" width="16" height="16" rx="2" ry="2" style="fill: #007884;"></rect>
    </g>
  </g>
</svg>

The video compositions include, but aren't limited to the following:

- Picture-in-picture
- Side-by-side
- Alpha blending

If no composition parameters and dimensions are specified in the [GstCaps](https://gstreamer.freedesktop.org/documentation/gstreamer/gstcaps.html) source pad, the output video frames
            will have the same dimensions as the biggest incoming video stream.

Similarly, if the frame rate isn't set in GstCaps, it's taken from the stream with the
            highest frame rate. And if output GstCaps doesn't have an explicitly set format, the
            plugin negotiates the most common format based on the input streams.

The plugin uses the Qualcomm IB2C library or Qualcomm Computer Vision SDK for all the
            transformation operations.

- The Qualcomm IB2C library is wrapped in the custom GstC2dVideoConverter or
                GstGlesVideoConverter abstraction layer.
- It contains APIs to create, configure, and process the incoming and outgoing
                buffers.
- The recommended plugin is GstGLESVideoConverter.

A custom buffer pool class called GstImageBufferPool allocates the output buffers.
            GstImageBufferPool allocates either GBM or ION buffers:

- The GBM allocation is done through the Qualcomm libgbm.
- The ION allocation is done through IOCTL commands to the kernel.

## Inheritance chain

[GObject](https://docs.gtk.org/gobject/) → [GstObject](https://gstreamer.freedesktop.org/documentation/gstreamer/gstobject.html?gi-language=c) → [GstElement](https://gstreamer.freedesktop.org/documentation/gstreamer/gstelement.html?gi-language=c) → [GstAggregator](https://gstreamer.freedesktop.org/documentation/base/gstaggregator.html?gi-language=c) → GstVideoComposer

The following tables provide information on pad templates and element properties of
                qtivcomposer. For use cases, see [Video composition use cases](https://docs.qualcomm.com/doc/80-70022-50/topic/video-composition.html).

## Pad configuration

| Pad Name | Capabilities | Capabilities | Capabilities |
| --- | --- | --- | --- |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,<br>                                (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,<br>                                (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,<br>                                (string)BGR, (string)GRAY8 } |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw | width: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw | height: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw | framerate: | [ 0/1, 255/1 ] |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw(memory:GBM) | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,<br>                                (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,<br>                                (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,<br>                                (string)BGR, (string)GRAY8 } |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw(memory:GBM) | width: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw(memory:GBM) | height: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'<br><ul class="ul" id="qtivcomposer__ul_rkh_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> On request</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> sink</li><br><br>                                </ul> | video/x-raw(memory:GBM) | framerate: | [ 0/1, 255/1 ] |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,<br>                                (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,<br>                                (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,<br>                                (string)BGR, (string)GRAY8 } |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw | width: | [ 1, 32767 ] |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw | height: | [ 1, 32767 ] |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw | framerate: | [ 0/1, 255/1 ] |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw(memory:GBM) | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,<br>                                (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,<br>                                (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,<br>                                (string)BGR, (string)GRAY8 } |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw(memory:GBM) | width: | [ 1, 32767 ] |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw(memory:GBM) | height: | [ 1, 32767 ] |
| SRC template: 'src'<br><ul class="ul" id="qtivcomposer__ul_kcp_dlv_q1c"><br>                                    <li class="li"><em class="ph i">Availability:</em> Always</li><br><br>                                    <li class="li"><em class="ph i">Direction:</em> source</li><br><br>                                </ul> | video/x-raw(memory:GBM) | framerate: | [ 0/1, 255/1 ] |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |

| Pad | Property | Description |
| --- | --- | --- |
| 'sink\_%u' | zorder | Z axis order, the default is the order of creation.<br><ul class="ul" id="qtivcomposer__ul_x3v_2lv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY, PAUSED<br>                                        or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">Integer. Range: ˗1 to 2147483647 Default: ˗1</li><br><br>                                </ul> |
| 'sink\_%u' | crop | The crop rectangle ('&lt;X, Y, WIDTH, HEIGHT &gt;').<br><ul class="ul" id="qtivcomposer__ul_kl3_flv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY, PAUSED<br>                                        or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">GstValueArray of GValues of type "gint"</li><br><br>                                </ul> |
| 'sink\_%u' | position | The X and Y coordinates of the destination rectangle upper left<br>                                    corner ('&lt;X, Y&gt;').<br><ul class="ul" id="qtivcomposer__ul_exn_flv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY, PAUSED<br>                                        or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">GstValueArray of GValues of type "gint"</li><br><br>                                </ul> |
| 'sink\_%u' | dimensions | The destination rectangle width and height, if left as '0'<br>                                    they're the same as input dimensions ('&lt;WIDTH, HEIGHT&gt;')<br><ul class="ul" id="qtivcomposer__ul_tfy_flv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY,<br>                                        PAUSED, or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">GstValueArray of GValues of type "gint"</li><br><br>                                </ul> |
| 'sink\_%u' | alpha | Alpha channel value.<br><ul class="ul" id="qtivcomposer__ul_bmd_glv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY,<br>                                        PAUSED, or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">Double. Range: 0.0 - 1.0 Default: 1.0</li><br><br>                                </ul> |
| 'sink\_%u' | flip-horizontal | Flip the video image horizontally.<br><ul class="ul" id="qtivcomposer__ul_wvs_glv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY,<br>                                        PAUSED, or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">Boolean. Default: false</li><br><br>                                </ul> |
| 'sink\_%u' | flip-vertical | Flip the video image vertically.<br><ul class="ul" id="qtivcomposer__ul_hlg_hlv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY,<br>                                        PAUSED, or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">Boolean. Default: false</li><br><br>                                </ul> |
| 'sink\_%u' | rotate | Rotate the video image.<br><ul class="ul" id="qtivcomposer__ul_lx4_hlv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY,<br>                                        PAUSED, or PLAYING state, 0x40000000</li><br><br>                                    <li class="li">Enum "GstVideoComposerRotate" Default: 0, "none"<ul class="ul" id="qtivcomposer__ul_jt3_24m_4yb"><br>                                            <li class="li"> (0): none - No rotation</li><br><br>                                            <li class="li"> (1): 90CW - Rotate 90 degrees clockwise</li><br><br>                                            <li class="li"> (2): 90CCW - Rotate 90 degrees<br>                                                counter-clockwise</li><br><br>                                            <li class="li"> (3): 180 - Rotate 180 degrees</li><br><br>                                        </ul><br></li><br><br>                                </ul> |
| 'sink\_%u' | emit-signals | Send signals to signal data consumption.<br><ul class="ul" id="qtivcomposer__ul_clr_3lv_q1c"><br>                                    <li class="li"> flags: readable, writable</li><br><br>                                    <li class="li"> Boolean. Default: false</li><br><br>                                </ul> |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |
|  |  |  |

## Element configuration

Table : Element properties of qtivcomposer

| Property | Description |
| --- | --- |
| name | The name of the object.<br><ul class="ul" id="qtivcomposer__ul_ocj_klv_q1c"><br>                                    <li class="li">flags: readable, writable</li><br><br>                                    <li class="li">String. Default: "videocomposer0"</li><br><br>                                </ul> |
| parent | The parent of the object.<br><ul class="ul" id="qtivcomposer__ul_jdn_klv_q1c"><br>                                    <li class="li">flags: readable, writable</li><br><br>                                    <li class="li">Object of type "GstObject"</li><br><br>                                </ul> |
| engine | Engine backend used for the conversion operations.<ul class="ul" id="qtivcomposer__ul_icy_klv_q1c"><br>                                    <li class="li">flags: readable, writable</li><br><br>                                    <li class="li">Enum "GstVideoConverterBackend" Default: 1, "gles"<ul class="ul" id="qtivcomposer__ul_ayt_mlv_q1c"><br>                                            <li class="li">(1): gles - Use OpenGLES based video converter </li><br><br>                                            <li class="li">(2): fcv - Use FastCV based video converter</li><br><br>                                        </ul><br><div class="note note" id="qtivcomposer__note_etr_pyg_vdc"><span class="notetitle">Note:</span> The Qualcomm Computer Vision SDK (fcv) engine is currently<br>                not supported.</div><br></li><br><br>                                </ul> |
| latency | Additional latency in live mode allows upstream to take longer to<br>                                    produce buffers for the current position (in nanoseconds).<br><ul class="ul" id="qtivcomposer__ul_cn5_nlv_q1c"><br>                                    <li class="li">flags: readable, writable</li><br><br>                                    <li class="li">Unsigned Integer64. </li><br><br>                                    <li class="li">Range: 0 - 18446744073709551615 </li><br><br>                                    <li class="li">Default: 0</li><br><br>                                </ul> |
| start-time-selection | Decides which start time is output.<br><ul class="ul" id="qtivcomposer__ul_wd4_plv_q1c"><br>                                    <li class="li">flags: readable, writable</li><br><br>                                    <li class="li">Enum "GstAggregatorStartTimeSelection" Default: 0, "zero"<ul class="ul" id="qtivcomposer__ul_d2d_f4m_4yb"><br>                                            <li class="li"> (0): zero - Start at 0 running time (default)</li><br><br>                                            <li class="li"> (1): first - Start at the first observed input<br>                                                running time</li><br><br>                                            <li class="li"> (2): set - Set start time with start-time<br>                                                property</li><br><br>                                        </ul><br></li><br><br>                                </ul> |
| start-time | Start time to use if start-time-selection=set.<br><ul class="ul" id="qtivcomposer__ul_bf2_qlv_q1c"><br>                                    <li class="li">flags: readable, writable</li><br><br>                                    <li class="li">Unsigned Integer64. Range: 0 - 18446744073709551615 Default:<br>                                        18446744073709551615</li><br><br>                                </ul> |
| background | Background color.<br><ul class="ul" id="qtivcomposer__ul_gw3_qlv_q1c"><br>                                    <li class="li">flags: readable, writable, changeable in NULL, READY,<br>                                        PAUSED, or PLAYING state</li><br><br>                                    <li class="li">Unsigned Integer Range: 0 - 4294967295 </li><br><br>                                    <li class="li">Default: 4286611584</li><br><br>                                </ul> |

**Parent Topic:** [Configure display, camera, encode and decode plugins](https://docs.qualcomm.com/doc/80-70022-50/topic/display-plugins.html)

Last Published: Feb 20, 2026

[Previous Topic
qtiqmmfsrc](https://docs.qualcomm.com/bundle/publicresource/80-70022-50/topics/qtiqmmfsrc.md) [Next Topic
Waylandsink](https://docs.qualcomm.com/bundle/publicresource/80-70022-50/topics/waylandsink.md)