# qtivcomposer
Source: [https://docs.qualcomm.com/doc/80-70015-50/topic/qtivcomposer.html](https://docs.qualcomm.com/doc/80-70015-50/topic/qtivcomposer.html)
The qtivcomposer plugin uses the GPU hardware to merge/mix multiple input video
streams into a single output stream.
The pad properties determine the composition of the input buffers (for each stream) in
the output buffer.
The table lists some of the common pad properties of qtivcomposer. For more
information, see [Table : Pad properties of qtivcomposer](https://docs.qualcomm.com/doc/80-70015-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
output. |
| Crop | Sets the optional crop for the source. |
| Dimensions | Upscales/downscales the frames. |
| Rotate | Rotates the frames at right angles |
|
- Flip-horizontal
- Flip-vertical
| Flips the frames horizontally and vertically. |
| Alpha | Adds the alpha blending value to the frames. |
| Z order | Changes the order of the frames.
By default, the frames are
organized in the order in which the sink pads are created. For
example, sink\_0, and sink\_1. |
The figure shows the GStreamer pipeline using qtivcomposer that is working with multiple
video sources.
Figure : Pipeline with qtivcomposer

The video compositions include, but are not 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 is not set in GstCaps, it is taken from the stream with the
highest frame rate. And if output GstCaps does not 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-70015-50/topic/video-composition.html).
## Pad configuration
| Pad Name | Capabilities | Capabilities | Capabilities |
| --- | --- | --- | --- |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,
(string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,
(string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,
(string)BGR, (string)GRAY8 } |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw | width: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw | height: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw | framerate: | [ 0/1, 255/1 ] |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw(memory:GBM) | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,
(string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,
(string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,
(string)BGR, (string)GRAY8 } |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw(memory:GBM) | width: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw(memory:GBM) | height: | [ 1, 32767 ] |
| SINK template: 'sink\_%u'
- Availability: On request
- Direction: sink
| video/x-raw(memory:GBM) | framerate: | [ 0/1, 255/1 ] |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,
(string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,
(string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,
(string)BGR, (string)GRAY8 } |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw | width: | [ 1, 32767 ] |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw | height: | [ 1, 32767 ] |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw | framerate: | [ 0/1, 255/1 ] |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw(memory:GBM) | format: | { (string)NV12, (string)NV21, (string)UYVY, (string)YUY2,
(string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR,
(string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGB,
(string)BGR, (string)GRAY8 } |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw(memory:GBM) | width: | [ 1, 32767 ] |
| SRC template: 'src'
- Availability: Always
- Direction: source
| video/x-raw(memory:GBM) | height: | [ 1, 32767 ] |
| SRC template: 'src'
- Availability: Always
- Direction: source
| 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.
- flags: readable, writable, changeable in NULL, READY, PAUSED
or PLAYING state, 0x40000000
- Integer. Range: -1 - 2147483647 Default: -1
|
| 'sink\_%u' | crop | The crop rectangle ('<X, Y, WIDTH, HEIGHT >').
- flags: readable, writable, changeable in NULL, READY, PAUSED
or PLAYING state, 0x40000000
- GstValueArray of GValues of type "gint"
|
| 'sink\_%u' | position | The X and Y coordinates of the destination rectangle top left
corner ('<X, Y>').
- flags: readable, writable, changeable in NULL, READY, PAUSED
or PLAYING state, 0x40000000
- GstValueArray of GValues of type "gint"
|
| 'sink\_%u' | dimensions | The destination rectangle width and height, if left as '0' they
are the same as input dimensions ('<WIDTH, HEIGHT>')
- flags: readable, writable, changeable in NULL, READY,
PAUSED, or PLAYING state, 0x40000000
- GstValueArray of GValues of type "gint"
|
| 'sink\_%u' | alpha | Alpha channel value.
- flags: readable, writable, changeable in NULL, READY,
PAUSED, or PLAYING state, 0x40000000
- Double. Range: 0.0 - 1.0 Default: 1.0
|
| 'sink\_%u' | flip-horizontal | Flip the video image horizontally.
- flags: readable, writable, changeable in NULL, READY,
PAUSED, or PLAYING state, 0x40000000
- Boolean. Default: false
|
| 'sink\_%u' | flip-vertical | Flip the video image vertically.
- flags: readable, writable, changeable in NULL, READY,
PAUSED, or PLAYING state, 0x40000000
- Boolean. Default: false
|
| 'sink\_%u' | rotate | Rotate the video image.
- flags: readable, writable, changeable in NULL, READY,
PAUSED, or PLAYING state, 0x40000000
- Enum "GstVideoComposerRotate" Default: 0, "none"
- (0): none - No rotation
- (1): 90CW - Rotate 90 degrees clockwise
- (2): 90CCW - Rotate 90 degrees
counter-clockwise
- (3): 180 - Rotate 180 degrees
|
| 'sink\_%u' | emit-signals | Send signals to signal data consumption.
- flags: readable, writable
- Boolean. Default: false
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
## Element configuration
Table : Element properties of qtivcomposer
| Property | Description |
| --- | --- |
| name | The name of the object.
- flags: readable, writable
- String. Default: "videocomposer0"
|
| parent | The parent of the object.
- flags: readable, writable
- Object of type "GstObject"
|
| engine | Engine backend used for the conversion operations.
- flags: readable, writable
- Enum "GstVideoConverterBackend" Default: 1, "gles"
- (1): gles - Use OpenGLES based video converter
- (2): fcv - Use FastCV based video converter
|
| latency | Additional latency in live mode allows upstream to take longer to
produce buffers for the current position (in nanoseconds).
- flags: readable, writable
- Unsigned Integer64.
- Range: 0 - 18446744073709551615
- Default: 0
|
| start-time-selection | Decides which start time is output.
- flags: readable, writable
- Enum "GstAggregatorStartTimeSelection" Default: 0, "zero"
- (0): zero - Start at 0 running time (default)
- (1): first - Start at the first observed input
running time
- (2): set - Set start time with start-time
property
|
| start-time | Start time to use if start-time-selection=set.
- flags: readable, writable
- Unsigned Integer64. Range: 0 - 18446744073709551615 Default:
18446744073709551615
|
| background | Background color.
- flags: readable, writable, changeable in NULL, READY,
PAUSED, or PLAYING state
- Unsigned Integer Range: 0 - 4294967295
- Default: 4286611584
|
**Parent Topic:** [Display, camera, encode and decode plugins](https://docs.qualcomm.com/doc/80-70015-50/topic/display-plugins.html)
Last Published: Oct 27, 2025
[Previous Topic
qtiqmmfsrc](https://docs.qualcomm.com/bundle/publicresource/80-70015-50/topics/qtiqmmfsrc.md) [Next Topic
Waylandsink](https://docs.qualcomm.com/bundle/publicresource/80-70015-50/topics/waylandsink.md)