# qtivsplit 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. Table : Operational mode properties of qtivsplit | Operational mode | Description | | --- | --- | | none | | | 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 GstBuffer GST BIN + GstMemory: Image Plugin running in normal mode. Same stream is duplicated in all of its source pads but with different resolutions and color format. + GstVideoMeta: Describes the raw video data GstBuffer + GstMemory: Image + GstVideoMeta: Describes the raw video data video/x-rawwidth=1920, height=1080 format=YUV video/x-rawwidth=640, height=360 format=BGRA video/x-rawwidth=1280, height=720 format=RGB video/x-rawwidth=320, height=180 format=GRAY8 qtivsplit Sink plugin 0 Sink plugin 1 Sink plugin N-1 Sink plugin N Video source Qualcomm Open source **Figure : GStreamer pipeline with qtivsplit** GstBuffer GST BIN + GstMemory: Image Plugin running in ROI mode. For each ROI meta a buffer is created from thevideo frame and to the corresponding source pad with same id as the meta. In this mode, the plugin with an example input buffer (containing 3 ROI metas)and 4 source pads will produce valid buffer on 3 of the 4 pads (1 buffer per pad for each ROI meta) while on the 4th pad, the plugin will produces GAP buffer. + GstVideoMeta: Describes the raw video data+ GstVideoRegionoflnterestMeta: 1 st ROI Rectangle+ GstVideoRegionoflnterestMeta: 2 nd ROI Rectangle+ GstVideoRegionoflnterestMeta: N-1ROI Rectangle+ GstVideoRegionoflnterestMeta: N ROI Rectangle ......... GstBuffer + GstMemory: Image + GstVideoMeta: Describes the raw video data+ GstVideoRegionoflnterestMeta: Describes the actual pixel region in the buffer which is filled with valid image data video/x-rawwidth=1920, height=1080, format=YUV video/x-rawwidth=640, height=360, format=BGRA video/x-rawwidth=1280, height=720, format=RGB video/x-rawwidth=320, height=180, format=GRAY8 qtivsplit Sink plugin 0 Sink plugin 1 Sink plugin N-1 Sink plugin N Video source Qualcomm Open source **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 several streams, see [Video split use cases](https://docs.qualcomm.com/doc/80-80021-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-80021-50/topic/daisy-chain-detection-and-classification.html). ## Pad configuration | Pad Name | Capabilities | Capabilities | Capabilities | | --- | --- | --- | --- | |
SINK template: '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'



>
>
> | video/x-raw | width: | [ 1, 32767 ] | |
SINK template: 'sink'



>
>
> | video/x-raw | height: | [ 1, 32767 ] | |
SINK template: 'sink'



>
>
> | video/x-raw | framerate: | [ 0/1, 255/1 ] | |
SINK template: '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'



>
>
> | video/x-raw(memory:GBM) | width: | [ 1, 32767 ] | |
SINK template: 'sink'



>
>
> | video/x-raw(memory:GBM) | height: | [ 1, 32767 ] | |
SINK template: 'sink'



>
>
> | video/x-raw(memory:GBM) | framerate: | [ 0/1, 255/1 ] | |
SRC template: 'src\_%u'



>
>
> | 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'



>
>
> | video/x-raw | width: | [ 1, 32767 ] | |
SRC template: 'src\_%u'



>
>
> | video/x-raw | height: | [ 1, 32767 ] | |
SRC template: 'src\_%u'



>
>
> | video/x-raw | framerate: | [ 0/1, 255/1 ] | |
SRC template: 'src\_%u'



>
>
> | 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'



>
>
> | video/x-raw(memory:GBM) | width: | [ 1, 32767 ] | |
SRC template: 'src\_%u'



>
>
> | video/x-raw(memory:GBM) | height: | [ 1, 32767 ] | |
SRC template: 'src\_%u'



>
>
> | 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.
- | | parent | - The parent of the object.
- | | engine | - Engine backend used for the conversion operations.
- | Last Published: Mar 26, 2026 [Previous Topic Waylandsink](https://docs.qualcomm.com/bundle/publicresource/80-80021-50/topics/waylandsink.md) [Next Topic qtivtransform](https://docs.qualcomm.com/bundle/publicresource/80-80021-50/topics/qtivtransform.md) Source: [https://docs.qualcomm.com/doc/80-80021-50/topic/qtivsplit.html](https://docs.qualcomm.com/doc/80-80021-50/topic/qtivsplit.html)