# qtivsplit
Source: [https://docs.qualcomm.com/doc/80-70015-50/topic/qtivsplit.html](https://docs.qualcomm.com/doc/80-70015-50/topic/qtivsplit.html)
The qtivsplit plugin uses the GPU hardware to split a single input video stream into
multiple output streams. The number of streams is a user-defined variable and is equal to
the number of source pads.
The mode property for each source pad determines the method for splitting the incoming
stream.
| Operational mode | Description |
| :--- | :--- |
| none |
- The incoming video frames on the sink pad are duplicated on each
of the source pads.
- Additional color conversion and upscale/downscale is applied
based on the negotiated GstCaps on that
pad.
|
| single-roi-meta | |
| batch-roi-meta | Operates the [GstVideoRegionOfInterestMeta](https://gstreamer.freedesktop.org/documentation/video/gstvideometa.html#GstVideoRegionOfInterestMeta)
entries attached to the buffer but instead of sending one such entry, it
sends all the meta entries on the pads in that mode as separate
buffers. |
Each meta entry in the [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html#GstBuffer) is sent to its corresponding source
pad based on the ID and crop, upscale/downscale, and color conversion is performed to
match the negotiated [GstCaps](https://gstreamer.freedesktop.org/documentation/gstreamer/gstcaps.html). The source pads with no corresponding
ROI meta produce GAP buffers.
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 includes APIs to create, configure, and process the incoming and outgoing
buffers.
## Buffer management
Figure : Gstreamer pipeline with qtivsplit

Figure : qtivsplit - buffer management

The GstImageBufferPool custom buffer pool class allocates either GBM or ION output
buffers depending on the negotiated capabilities between GstImageBufferPool and
downstream plugins.
- The GBM allocation is done using Qualcomm libgbm.
- The ION allocation is done using the 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) → GstVideoSplit
The following tables provide information on pad templates and element properties of
qtivsplit. For use cases, see the following:
- For use case on splitting video into multiple streams, see [Video split use cases](https://docs.qualcomm.com/doc/80-70015-50/topic/video-split-use-cases.html).
- For use case on dynamic cropping, see [Daisy chain detection and classification](https://docs.qualcomm.com/doc/80-70015-50/topic/daisy-chain-detection-and-classification.html).
## Pad configuration
| Pad Name | Capabilities | Capabilities | Capabilities |
| --- | --- | --- | --- |
| SINK template: 'sink'
- Availability: Always
- 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'
- Availability: Always
- Direction: sink
| video/x-raw | width: | [ 1, 32767 ] |
| SINK template: 'sink'
- Availability: Always
- Direction: sink
| video/x-raw | height: | [ 1, 32767 ] |
| SINK template: 'sink'
- Availability: Always
- Direction: sink
| video/x-raw | framerate: | [ 0/1, 255/1 ] |
| SINK template: 'sink'
- Availability: Always
- 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'
- Availability: Always
- Direction: sink
| video/x-raw(memory:GBM) | width: | [ 1, 32767 ] |
| SINK template: 'sink'
- Availability: Always
- Direction: sink
| video/x-raw(memory:GBM) | height: | [ 1, 32767 ] |
| SINK template: 'sink'
- Availability: Always
- Direction: sink
| video/x-raw(memory:GBM) | framerate: | [ 0/1, 255/1 ] |
| SRC template: 'src\_%u'
- Availability: On request
- 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\_%u'
- Availability: On request
- Direction: source
| video/x-raw | width: | [ 1, 32767 ] |
| SRC template: 'src\_%u'
- Availability: On request
- Direction: source
| video/x-raw | height: | [ 1, 32767 ] |
| SRC template: 'src\_%u'
- Availability: On request
- Direction: source
| video/x-raw | framerate: | [ 0/1, 255/1 ] |
| SRC template: 'src\_%u'
- Availability: On request
- 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\_%u'
- Availability: On request
- Direction: source
| video/x-raw(memory:GBM) | width: | [ 1, 32767 ] |
| SRC template: 'src\_%u'
- Availability: On request
- Direction: source
| video/x-raw(memory:GBM) | height: | [ 1, 32767 ] |
| SRC template: 'src\_%u'
- Availability: On request
- Direction: source
| video/x-raw(memory:GBM) | framerate: | [ 0/1, 255/1 ] |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
Table : Pad properties for qtivsplit
| Pad | Property | Description |
| --- | --- | --- |
| 'src\_%u' | mode | Operational mode
|
## Element configuration
Table : Element properties of qtivsplit
| Property | Description |
| --- | --- |
| name | The name of the object.
- flags: readable, writable
- String. Default: "videosplit0"
|
| 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 - Uses OpenGLES based video converter (2):
- fcv - Uses Qualcomm Computer Vision SDK based video
converter
|
**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
Waylandsink](https://docs.qualcomm.com/bundle/publicresource/80-70015-50/topics/waylandsink.md) [Next Topic
qtivtransform](https://docs.qualcomm.com/bundle/publicresource/80-70015-50/topics/qtivtransform.md)