Intead of creating one pair of GDBusConnection + GDBusProxy objects for each PipeWire capture, be it window or desktop, use the global ones managed by portal.c. Even if g_bus_get_sync() ends up reusing the same object under the hood, it's still a net gain, since it has to perform some thread synchronization routines that aren't necessary here. Creating the proxy object was a worse offender, because despite being asynchronous, it would still incur in a few socket messages + a cancellable fd + thread synchronization. Reuse these objects from portal.c. The biggest code change here is that create_proxy() and on_proxy_created_cb() were merged into init_obs_pipewire().
Linux XShm capture plugin This plugin uses the MIT-SHM extension for the X-server to capture the desktop. Todo: - handle resolution changes of screens - handle adding/removing screens while recording - support different depths Contributing: If you are interested in helping out with the plugin, please drop by in the #obs-dev channel on quakenet. References: - http://www.x.org/releases/current/doc/xextproto/shm.html