Commit graph

112 commits

Author SHA1 Message Date
Wim Taymans
8ea78c2e3f pw_core -> pw_context
The proxy API is the one that we would like to expose for applications
and the other API is used internally when implementing modules or
factories.

The current pw_core object is really a context for all objects so
name it that way. It also makes it possible to rename pw_core_proxy
to pw_proxy later.
2019-12-10 18:19:56 +01:00
Wim Taymans
7dc8a33e3e fix unit tests 2019-12-06 17:12:07 +01:00
Wim Taymans
ca6f1bd2f1 remote: remove the remote
Mostly rename pw_remote_* to pw_core_proxy_*
2019-12-06 13:40:23 +01:00
Wim Taymans
3d79970d88 remote: remove events and states 2019-12-06 12:03:45 +01:00
Wim Taymans
8a959ea7a1 core_proxy: prepare to rename pw_remote -> pw_core_proxy
The pw_remote object is really a wrapper around the pw_core_proxy.
The events it emits are also available in the core proxy and are
generally awkward to use.

With some clever new pw_core_proxy_* methods and a pw_core_connect
to create the core_proxy, we can convert all code away from pw_remote.

This is a first step in this conversion, using the pw_remote behind
the scenes. It leaks into some places because it really needs to become
its own struct in a next step.
2019-12-06 11:48:40 +01:00
Wim Taymans
fcd4ae3334 remote: remove obsolete exported event
We can now do the same and more with the bound event on the proxy.
2019-11-29 13:34:06 +01:00
Wim Taymans
f56e4dbc4d interfaces: add event to notify of global bound id
Make it possible to know when a proxy is bound to a global id before
the global shows up in the registry. This makes it possible to match
locally created objects to the one appearing in the registry and
possibly avoid a second bind.
2019-11-29 13:34:00 +01:00
Wim Taymans
988144dda4 test: fix test 2019-11-29 13:29:40 +01:00
Wim Taymans
738603fd04 stream: Align with pw_filter
Remove some of the unused states in pw_stream. The app can know the
state by following the format and buffer events.

Make it possible to be notified of io are updates. This should make it
possible to follow the transport etc.

Make it possible to be notified of any param changes.

Rename finish_format to update_params because that is what it does.
Make this work in the same was as the filter: updating the params
removes all old params of the types and installs the new ones.

Don't get the Props and PropInfo from the node proxy, instead get them
directly from the adapter that we have locally. Update the controls
directly on the adapter instead of going to the server first.
2019-11-21 16:14:50 +01:00
Wim Taymans
8db4a797aa core: remove parent_id from the global event
Remove the parent_id from the global event. Remove the parent
and owner from the global object.

Use properties instead to mark parents and owners of objects.

Properties are easier to control for client exported objects and
usually a simple parent/child is not enough. For example, a client
exported node has the client as a parent but also the factory that
created the node.
2019-08-16 22:11:42 +02:00
Wim Taymans
e827d65659 stream: make the control info const 2019-08-13 18:41:22 +02:00
Wim Taymans
c6a7b3eedb channelmix: implement per channel volume
Implement per channel volume on channelmix. Extend control on stream to
take an array of values when possible.

Remove name argument from pw_node_new and pw_device_new. We can pass
this as a property instead.

Improve properties on nodes to more closely match what pulseaudio does.
Don't let the monitor do too much with the udev properties but let the
session manager set the description and icon-names.

Remove some change_mask flags for things that don't change in
introspect. Use the flags to mark changes in -cli and -monitor.
2019-08-12 15:14:39 +02:00
Wim Taymans
bf618c3440 tests: fix unit tests again 2019-07-29 17:13:13 +02:00
Wim Taymans
49c4355507 fix build 2019-06-24 17:18:44 +02:00
Wim Taymans
f205504c26 test-core: add more core support tests 2019-06-06 16:40:15 +02:00
Wim Taymans
86dc0496a5 simply use INTERFACE_Loop for the main-loop 2019-06-06 15:20:43 +02:00
Wim Taymans
e9ecc47696 clean up proxy and resource api
Remove override for resources, it can't work in general.
Rename method to add_object_listener to add a listener for
events/methods from the remote object.
Rename some methods to _call to call the interface and _notify
to notify the listeners.
Remove unused client event to be notified of resource
implementations.
2019-05-29 10:39:24 +02:00
Wim Taymans
ff946e3d4b interface: add an interface struct
The interface struct has the type,version and methods of the
interface.
Make spa interfaces extend from spa_interface and make a
separate structure for the methods.
Pass a generic void* as the first argument of methods, like
we don in PipeWire.
Bundle the methods + implementation in a versioned inteface
and use that to invoke methods. This way we can do version
checks on the methods.
Make resource and proxy interfaces that we can can call. We
can then make the core interfaces independent on proxy/resource and
hide them in the lower layers.
Add add_listener method to methods of core interfaces, just
like SPA.
2019-05-23 12:59:24 +02:00
Wim Taymans
ca051282a4 port: add port subscribe_params 2019-03-18 16:34:07 +01:00
Wim Taymans
6e17b38658 test: fix test 2019-03-15 21:04:49 +01:00
Wim Taymans
09c4683ef1 interfaces: make events return void
Events are dispatched with hooks and have no return value.

Make it possible to get the last resource and proxy sender value
for where we need it.
2019-03-01 14:04:05 +01:00
Wim Taymans
f2ff6f393b more async improvements
Make the sequence number an int.

Keep track of the last received seq number and pass it in error
replies.

Pass seq in for_each methods.
2019-02-25 16:25:27 +01:00
Wim Taymans
d2c18c7b1a Improve async handling
Don't use special callback in node to receive the results. Instead,
use a generic result callback to receive the result. This makes things
a bit more symetric and generic again because then you can choose how
to match the result to the request and you have a generic way to handle
both the sync and async case. We can then also remove the wait method.
This also makes the remote interface and spa interface to objects very
similar.

Make a helper object to receive and dispatch results. Use this in the
helper for enum_params.

Make device use the same result callbacks.
2019-02-25 12:29:57 +01:00
Wim Taymans
eea062ee53 interfaces: improve remote API
Add return values to events and method callbacks. This makes it
possible to pass any error or async return value.
Add sync/done/error in both directions so that both proxy and resource
and perform/reply sync and produce errors.
Return a SPA_ASYNC from remote method calls (and events), keep the
sequence number in the connection.
With the core sync/done we can remove the client-node done method and
it's internal sequence number along with the seq number in method calls.
We can also use the method/event async return value to perform a sync
with as the unique sequence number for this method.
Add sync method and done/error event to proxy and resource.
2019-02-18 12:31:36 +01:00
Wim Taymans
8ae5424359 resource: improve error handling
Make some more varargs error functions
Make pw_resource_error always just send the error to the resource id.
Make sure we send errors to the right destination.
Add proxy error event and emit it when the core finds an error for
the given proxy id.
The client error is supposed to be sent to all resources of a client
for the given global.
2019-02-14 16:53:42 +01:00
George Kiagiadakis
71eb538fba meson: prefix the names of the tests so that they are unique in the tree
meson < 0.46 does not allow two targets to share the same name;
meson >= 0.46 relaxes that requirement, but I see no reason to require
a new version of meson just for this
2019-02-13 11:22:45 +01:00
Wim Taymans
31dacd9d6f remote: move node export code to client-node module
Make the code to export objects more generic. Make it possible for
modules to register a type to export.
Make the client-node also able to export plain spa_nodes.
Let the remote signal the global of the exported object if any. We can
then remote the (unused) remote_id from the proxy.
2019-01-31 11:02:13 +01:00
Wim Taymans
6856f02cab properties: avoid NULL and empty keys
Improve unit test
2019-01-11 12:24:40 +01:00
Wim Taymans
9dc9e97c6f tests: add more properties tests
Fix properties n_items counter
2019-01-11 11:25:53 +01:00
Wim Taymans
7216f4d4ac tests: add test for properties 2019-01-11 10:24:25 +01:00
Wim Taymans
4dcdbe1795 tests: add test for utils 2019-01-10 17:58:37 +01:00
Wim Taymans
6a637a8f24 tests: add test for interfaces 2019-01-10 17:20:45 +01:00
Wim Taymans
66bab1d9b2 remote: remove some events
Remove some events from the remote that we can find on the core_proxy.
Use the core_proxy to get to the done and info events.
Remove pw_remote_get_core_info(), we don't need this anymore now that
we don't listen for the event and the user can keep track of this
herself.
2019-01-10 10:08:14 +01:00
Wim Taymans
714178b1e4 meson: add module dir directory for tests 2019-01-09 10:54:56 +01:00
Wim Taymans
69b7c18718 tests: add more tests 2019-01-09 10:48:18 +01:00
Wim Taymans
23c439fd66 meson: set spa plugin dir 2019-01-08 17:56:20 +01:00
Wim Taymans
b5a7891ee1 tests: add more tests 2019-01-08 17:38:34 +01:00
Wim Taymans
fb5ae6df43 tests: add array test 2019-01-08 13:40:41 +01:00
Wim Taymans
2c571cddf5 tests: add c++ include test 2019-01-08 13:00:24 +01:00
Wim Taymans
cdb2028f9b src -> pinos and fix include paths
Rename src to pinos and fix all the include paths so that they contain
pinos/ to avoid conflicts
2016-02-01 15:40:48 +01:00
Wim Taymans
c2cf359076 Rework pay/depay elements
Rename the payloader and depayloader to pinospay/pinosdepay because they
now store data in a pinos specific format.
Subclass GstElement because they are not real transform elements.
Rework/remove some buffer functions that are not used by some more
performant ones.
2015-08-27 16:41:25 +02:00
Wim Taymans
78a7a1ea72 Fix some memory leaks 2015-08-26 15:44:29 +02:00
Wim Taymans
e61cbb3931 monitor: move subscribe test to monitor tool 2015-08-12 09:54:10 +02:00
Wim Taymans
b055748b1c introspect: add change_mask to introspect
Add a bitmask field to mark what fields have changed since the last
introspection call. We can then remove the properties from the subscribe
call.
2015-08-05 11:57:02 +02:00
Wim Taymans
8361f74646 introspect: improve instrospection
Pass changed properties around so that we can print them
2015-08-04 17:37:25 +02:00
Wim Taymans
51f18b540a introspect: add state and format for output source
Add state and negotiated format to output source properties.
2015-08-04 15:59:36 +02:00
Wim Taymans
13d846ec38 Improve introspection
Add instrospection of client and source-output.
Add properties to source-output and to CreateSourceOutput/Input
Add helper to fill properties of context.
Add client-name to pinossrc and pinossink
Improve test-subscribe to show all new introspection details.
2015-07-28 17:05:03 +02:00
Wim Taymans
7159ea8408 deviceprovider: add device provider
Add device provider
Clean up states
Make generic object id instead of exposing GDBusProxy
Add more introspection API
2015-07-08 17:40:37 +02:00
Wim Taymans
a3505fb880 more rename PV -> PINOS, Pv -> Pinos, pv -> pinos 2015-07-07 16:46:23 +02:00
Wim Taymans
4b72848a1a Rename pulsevideo to pinos 2015-06-30 18:06:36 +02:00