Skip to content

plugins/screencast: Add PipeWire explicit sync support

Doğukan Korkmaztürk requested to merge dkorkmazturk/kwin:master into master

This change adds explicit sync support to screencasting. If KWin and the client successfully negotiate to use explicit sync, KWin adds two additional blocks to each PipeWire buffer to store file descriptors for the acquire and release syncobjs. In this implementation, these are the same syncobjs. The timeline points that the client needs to wait and signal are set by KWin and shared with the client using a new SPA metadata type.

The enum describing the type of the PipeWire buffer blocks that contain syncobj file descriptors and the metadata struct describing the timeline points are added in PipeWire 1.2.0. So, this change bumps up the required PipeWire version. However, this change does not break compatibility with older versions of PipeWire.

Some of the design decisions were influenced by a similar draft change in Mutter: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3876

Edited by Doğukan Korkmaztürk

Merge request reports