Skip to content
Snippets Groups Projects
  1. Jan 21, 2021
  2. Nov 25, 2020
    • George Kiagiadakis's avatar
      pw-object-mixin: refactor, implement param caching and features for impl objects · bd65517b
      George Kiagiadakis authored
      Now the WpPipewireObject interface is directly implemented by the mixin
      and there is another interface that users of the mixin must implement
      in order for the mixin to work proprely.
      
      A lot of manual stuff that proxy classes had to do before are now
      in the mixin. Also most of the data that would normally reside in Private
      structures is now in the mixin data structure (stored as qdata on the object).
      This is achieving the best amount of code reuse so far.
      
      For impl objects (WpImpl*) there are also default implementations of the
      standard pipewire object methods and the INFO & PARAM_* features are
      more coherently enabled during the whole lifetime of these objects.
      bd65517b
  3. Nov 13, 2020
    • George Kiagiadakis's avatar
      lib: refactor WpProxy · 2f3f5f8e
      George Kiagiadakis authored
      This is an attempt to unclutter the API of WpProxy and
      split functionality into smaller pieces, making it easier
      to work with.
      
      In this new class layout, we have the following classes:
      
      - WpObject: base class for everything; handles activating
      |           and deactivating "features"
      |- WpProxy: base class for anything that wraps a pw_proxy;
       |          handles events from pw_proxy and nothing more
       |- WpGlobalProxy: handles integration with the registry
      
      All the other classes derive from WpGlobalProxy. The reason
      for separating WpGlobalProxy from WpProxy, though, is that
      classes such as WpImplNode / WpSpaDevice can also derive from
      WpProxy now, without interfacing with the registry.
      
      All objects that come with an "info" structure and have properties
      and/or params also implement the WpPipewireObject interface. This
      provides the API to query properties and get/set params. Essentially,
      this is implemented by all classes except WpMetadata (pw_metadata
      does not have info)
      
      This interface is implemented on each object separately, using
      a private "mixin", which is a set of vfunc implementations and helper
      functions (and macros) to facilitate the implementation of this interface.
      
      A notable difference to the old WpProxy is that now features can be
      deactivated, so it is possible to enable something and later disable
      it again.
      
      This commit disables modules, tests, tools, etc, to avoid growing the
      patch more, while ensuring that the project compiles.
      2f3f5f8e
  4. Jun 10, 2020
    • George Kiagiadakis's avatar
      impl-node: subclass from GObject · 7a486f1f
      George Kiagiadakis authored
      By mistake, WpImplNode was developed by keeping in mind that the proxy
      returned by pw_core_export() is a PW_TYPE_INTERFACE_Node, but this
      is not true. It's actually a ClientNode...
      
      Unfortunately, making WpImplNode work as if it was a WpNode is
      not so easy, especially when it comes to handling params, which
      need to be queried syncrhonously on the underlying spa_node.
      
      So, instead of fixing WpImplNode to work as a WpNode, we choose to
      disconnect them. This way, WpImplNode will not be used as a proxy
      in the registry and the registry will normally create WpNode proxies
      instead, making round-trips through the server to change node params.
      7a486f1f
  5. Jun 04, 2020
  6. May 26, 2020
  7. May 25, 2020
  8. May 14, 2020
  9. May 05, 2020
  10. May 03, 2020
  11. Apr 24, 2020
    • George Kiagiadakis's avatar
      object-manager: implement the 'installed' signal and improve state management · 9f1b46ee
      George Kiagiadakis authored
      The 'installed' signal can be used to know that there are no
      known objects that are being prepared internally, so the object
      manager is ready to use.
      
      This also improves internal state management so that the 'objects-changed'
      signal cannot be fired earlier than it should. Previously there
      were corner cases with complex proxy features, as the object manager
      relied on the fact that after a core 'sync' it is safe to assume
      that all proxies are augmented... that's not always the case.
      9f1b46ee
  12. Apr 23, 2020
  13. Apr 22, 2020
  14. Apr 21, 2020
  15. Apr 14, 2020
  16. Feb 19, 2020
  17. Feb 11, 2020
    • George Kiagiadakis's avatar
      proxy/core: refactor object creation · 9330208a
      George Kiagiadakis authored
      * core no longer exposes create_remote/local_object
      * node, device & link have constructor methods
        to enable the create_remote_object functionality
      * added WpImplNode to wrap pw_impl_node and allow creating
        "local" node instances
      * added WpSpaDevice to wrap spa_device and allow creating
        "local" device instances
      * exporting objects in all cases now happens by requesting
        FEATURE_BOUND from the proxy, eliminating the need for WpExported
      * replaced WpMonitor by new, simpler code directly in module-monitor
      * the proxy type lookup table in WpProxy is gone, we now
        use a field on the class structure of every WpProxy subclass
        and iterate through all the class structures instead; this is
        more flexible and extensible
      9330208a
  18. Jan 22, 2020
  19. Jan 13, 2020
  20. Nov 07, 2019
  21. Nov 06, 2019
  22. Aug 27, 2019
  23. Aug 26, 2019
  24. Aug 25, 2019
  25. Jul 25, 2019
  26. Jul 10, 2019
  27. Jun 20, 2019
  28. Jun 19, 2019
  29. Jun 18, 2019
  30. Jun 17, 2019
Loading