# Waylandsink

The waylandsink plugin uses the [GstVideoSink](https://gstreamer.freedesktop.org/documentation/video/gstvideosink.html?gi-language=c) GStreamer class. It's based on the Wayland [Weston](https://wayland.pages.freedesktop.org/weston/) compositor, which creates its own window and renders the incoming video frames in the window.

It maps the Weston client APIs and states to the appropriate GStreamer APIs and states. Qualcomm has extended the waylandsink implementation and added support for window positioning, a proprietary GBM-based buffer backend for zero-copy and XDG shell backend.

## 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) → [GstBaseSink](https://gstreamer.freedesktop.org/documentation/base/gstbasesink.html?gi-language=c) → [GstVideoSink](https://gstreamer.freedesktop.org/documentation/video/gstvideosink.html?gi-language=c) → GstWaylandSink

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

## Pad configuration

| Pad Name | Capabilities | Capabilities | Capabilities |
| --- | --- | --- | --- |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | format: | { (string)BGRx, (string)BGRA, (string)RGBx, (string)xBGR, (string)xRGB, (string)RGBA, (string)ABGR, (string)ARGB, (string)RGB, (string)BGR, (string)RGB16, (string)BGR16, (string)YUY2, (string)YVYU, (string)UYVY, (string)AYUV, (string)NV12, (string)NV21, (string)NV16, (string)YUV9, (string)YVU9, (string)Y41B, (string)I420, (string)YV12, (string)Y42B, (string)v308 } |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | width: | [ 1, 2147483647 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | height: | [ 1, 2147483647 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | framerate: | [ 0/1, 2147483647/1 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw(memory:DMABuf) | format: | { (string)BGRx, (string)BGRA, (string)RGBx, (string)xBGR, (string)xRGB, (string)RGBA, (string)ABGR, (string)ARGB, (string)RGB, (string)BGR, (string)RGB16, (string)BGR16, (string)YUY2, (string)YVYU, (string)UYVY, (string)AYUV, (string)NV12, (string)NV21, (string)NV16, (string)YUV9, (string)YVU9, (string)Y41B, (string)I420, (string)YV12, (string)Y42B, (string)v308 } |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw(memory:DMABuf) | width: | [ 1, 2147483647 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw(memory:DMABuf) | height: | [ 1, 2147483647 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw(memory:DMABuf) | framerate: | [ 0/1, 2147483647/1 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | format: | { (string)BGRx, (string)BGRA, (string)RGBx, (string)xBGR, (string)xRGB, (string)RGBA, (string)ABGR, (string)ARGB, (string)RGB, (string)BGR, (string)RGB16, (string)BGR16, (string)YUY2, (string)YVYU, (string)UYVY, (string)AYUV, (string)NV12, (string)NV21, (string)NV16, (string)YUV9, (string)YVU9, (string)Y41B, (string)I420, (string)YV12, (string)Y42B, (string)v308 } |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | width: | [ 1, 2147483647 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | height: | [ 1, 2147483647 ] |
| <br>SINK template: 'sink'<br><br><br>Availability\*:\*  Always<br><br><br>Direction: sink | video/x-raw | framerate: | [ 0/1, 2147483647/1 ] |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |

## Element configuration

Note

For the current release, **x**, **y**, **width**, and **height** properties aren’t supported.

Table : Element properties of Waylandsink

| Property | Description |
| --- | --- |
| name | - The name of the object.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>String. Default: "waylandsink0"</p></li><br></ul> |
| parent | - The parent of the object.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Object of type "GstObject"</p></li><br></ul> |
| sync | - Sync on the clock.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Boolean. Default: true</p></li><br></ul> |
| max-lateness | - Maximum number of nanoseconds that a buffer can be late before it's dropped (-1 unlimited).<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Integer64. Range: ˗1 to 9223372036854775807, default: 20000000</p></li><br></ul> |
| qos | - Generate quality-of-service events upstream.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Boolean. Default: true</p></li><br></ul> |
| async | - Go asynchronously to PAUSED.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Boolean. Default: true</p></li><br></ul> |
| ts-offset | - Timestamp offset in nanoseconds.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Integer64. Range: ˗9223372036854775808 to 9223372036854775807, default: 0</p></li><br></ul> |
| enable-last-sample | - Enable the last-sample property.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Boolean. Default: true</p></li><br></ul> |
| last-sample | - The last sample that was received in the sink.<br>    - <ul class="simple"><br><li><p>flags: readable</p></li><br><li><p>Boxed pointer of type "GstSample"</p></li><br></ul> |
| blocksize | - Size in bytes to pull per buffer (0 = default).<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Unsigned Integer. Range: 0 - 4294967295 Default: 4096</p></li><br></ul> |
| render-delay | - More render delay of the sink in nanoseconds.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0</p></li><br></ul> |
| throttle-time | - The time to keep between rendered buffers (0 = disabled).<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0</p></li><br></ul> |
| max-bitrate | - The maximum bits per second to render (0 = disabled).<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0</p></li><br></ul> |
| show-preroll-frame | - Render or not render the video frames during preroll.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Boolean. Default: true</p></li><br></ul> |
| display | - The Wayland display name that can be used to make a connection, if it isn't supplied using the GstContext.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>String. Default: null</p></li><br></ul> |
| xdg-shell | - Use the XDG shell protocol for the display.<br>    - <ul class="simple"><br><li><p>flags: readable, writable</p></li><br><li><p>Boolean. Default: true</p></li><br></ul> |
| fullscreen | - Determine if the surface should be full screen.<br>    - <ul class="simple"><br><li><p>flags: readable, writable, changeable in NULL, READY, PAUSED, or PLAYING state</p></li><br><li><p>Boolean. Default: false</p></li><br></ul> |

Last Published: May 14, 2026

[Previous Topic
qtivcomposer](https://docs.qualcomm.com/bundle/publicresource/80-80022-50/topics/qtivcomposer.md) [Next Topic
qtivsplit](https://docs.qualcomm.com/bundle/publicresource/80-80022-50/topics/qtivsplit.md)

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