* It should be possible to activate/deactivate while an item
is exported (if the item supports it, but that's a subclass matter)
* It should be possible to deactivate without resetting configuration
This feature enables the caching of WpEndpointStream objects
inside WpEndpoint, making information about streams readily
accessible to the user of an endpoint
This allows having constraints on the pw properties and the GObject
properties of the proxy, instead of just on the global properties.
This is only useful for constraints on impl proxies, since the globals
coming from the registry don't have a proxy object associated at the
time they are added in the object managers
* introduces API to export session items
* introduces small changes in the WpSiEndpoint & WpSiStream
interfaces to make it nicer to work with
* ports WpImplEndpoint to use PW_TYPE_INTERFACE_Endpoint
to export. Depends on:
https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/246
(was merged after 0.3.2)
This is an asynchronous operation class, like GTask,
but it is made to execute several operations underneath,
using a state machine, instead of just a single operation.
When a new global is created, it is not certain
if the registry global event or the proxy bound event will
be fired first. In order to make sure we associate all
proxies to their WpGlobals correctly, we now wait a core sync
before exposing globals to the object managers, so that in case
the implementation proxy receives the bound event after the
registry creates the WpGlobal, we can make sure to use this
proxy instead of constructing a new one through the object managers
There are 3 kinds of WpProxy objects:
* the ones that are created as a result of binding a global
from the registry
* the ones that are created as a result of calling into a remote
factory (wp_node_new_from_factory, etc...)
* the ones that are a local implementation of an object
(WpImplNode, etc...) and are exported
Previously the object manager was only able to track the first kind.
With these changes we can now also have globals associated with
WpProxies that were created earlier (and caused the creation of the global).
This saves some resources and reduces round-trips (in case client
code wants to change properties of an object that is locally
implemented, it shouldn't need to do a round-trip through the server)