Commit graph

236 commits

Author SHA1 Message Date
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
0d8821096a client-node: only update info when change_mask set 2019-02-14 17:48:56 +01:00
Wim Taymans
755d7ca329 client-node: handle NULL info in update 2019-02-14 17:45:42 +01:00
Wim Taymans
21957e9e8d node: Add port_info event
Add a port_info event. With this, we get updates to ports pushed to
us, which is more convenient and also allows for better dynamic
add/remove of ports.
We don't need to the PortChanged event anymore
We can remove the get_port_ids/get_n_ports/port_get_info methods.
Update plugins
2019-02-14 17:08:46 +01:00
Wim Taymans
3c78036a97 node: process -> ready
Change the process callback to ready to avoid confusion with the
process method and it also describes better what happened.
2019-02-14 17:04:59 +01:00
Wim Taymans
7a1bd163f7 node: remove port_send_command
We don't want to do this, we use a sequence to change things
at runtime.
2019-02-13 12:43:15 +01:00
Wim Taymans
5de7898808 node: implement activation
Make an eventfd for each node and listen for events when the node
is activated.
Reorganize some graphs links to make it possible to activiate nodes
by signaling the eventfd
Pass the peer node to each remote node and let the remote node
directly activate the peer when needed.
Let each node signal the driver node when finished.
With this we don't need to go through the daemon to schedule the
graph, nodes will simply activate eachother. We only go to the
server when there is a server node to schedule.
Keep stats about the state of each node and the time it was
triggered, running and finished.
2019-02-12 17:42:33 +01:00
Wim Taymans
658c1da52f node: allocate shared mem for activation
Allocate a per node a piece of shared memory where we place the
activation structure with the graph state and io_position.
We can then give this info to nodes so that they can get the position
in the graph directly but also later, activate the next node in
the graph.
2019-02-07 12:34:54 +01:00
Wim Taymans
baa6b1472d client-node: handle _set_io on the node 2019-01-31 17:50:55 +01:00
Wim Taymans
93e8074b2c alloc: improve alignment in alloactor
link: use buffer allocator
Add more tests
2019-01-25 13:32:35 +01:00
Wim Taymans
13bf70a8dd mem: align memory to requested alignment
Improve the allocators to always align the buffer memory to the
requested alignment
Use aligned read and writes for sse functions and check alignment,
optionally falling back to unaligned path.
Add more tests and benchmark cases
Check and warn for misaligned memory in plugins.
2019-01-24 18:28:52 +01:00
Wim Taymans
2622e085a9 pod: add more helpers
Implement more unit-tests
2019-01-17 17:23:47 +01:00
Wim Taymans
3dc6820e9e Don't use __ in defines or declarations, it's reserved
SPA_TYPE -> SPA_TYPE_INFO for type info strings
improve includes

Fixes #115
2019-01-14 13:00:00 +01:00
Wim Taymans
b0f4be5fbc fix more compile errors
Avoid void * arithmetic
Do explicit casts to target type to make c++ happy
2019-01-08 11:53:36 +01:00
Wim Taymans
e918f9f77c fix sign confusion 2019-01-07 15:52:42 +01:00
Wim Taymans
de796d34ad pod: handle pod copy failure
Don't check NULL in pw_spa_pod_copy so that we can check for allocation
failures when the functions returns NULL.
2019-01-07 15:36:19 +01:00
Wim Taymans
85f2e93c54 Relicense as MIT/X11
Remove some obsolete files
2018-11-05 17:48:52 +01:00
Wim Taymans
df4a5efb89 client-node: don't try to modify the clock
The clock position should match the buffer timestamps and we should
not try to change it. If a client wants to align stream it will
have to do this itself.
2018-10-30 16:32:25 +00:00
Wim Taymans
723d4d9db7 client-node: use spa_io_position
Remove old internal structure
2018-10-24 10:34:28 +02:00
Wim Taymans
66de372e9a add node set_io function
Also allow setting io areas on nodes. We need this to set the
graph clock and period size on the nodes.
2018-10-23 12:31:41 +02:00
Wim Taymans
63333adca3 port: don't keep port_info around but make copy 2018-10-08 13:00:18 +02:00
Wim Taymans
6b0c28e717 client-node: don't try to add invalid memid 2018-09-28 05:49:38 +02:00
Wim Taymans
30316df5c8 fix some leaks 2018-09-24 09:33:09 +02:00
Wim Taymans
59f10ad453 Add proxy destroy
Make the current destroy method on the core for proxies to remove the
server side resource.
Make a new destroy method on the registry to destroy globals.
Remove the destroy method on the client-node
media-session: monitor the dsp and device node states to manage the
session state
2018-09-21 16:43:11 +02:00
Wim Taymans
7cdb980b1a debug: allow custom type root 2018-08-30 12:01:52 +02:00
Wim Taymans
90c1a95eef More type cleanups
SPA_ID_* -> SPA_TYPE_*. We use 'type' for all registered types.
ID refers to either a registered type or an enum.
Improve introspection of object ids. Make 0 an invalid enum and
use it to look up the object id type.
Move some type-info files together.
Swap type and id of the object, we first specify the type and then
the id because the meaning of the id depends on the object type.
2018-08-27 15:03:11 +02:00
Wim Taymans
d26aecfef2 More type fixes
Param ids and IO ids are now simple enums.
Move some type info in one place, delete some type-info files
Fix type debug
Make audio layout an enum
Mark more enums as enums in types so they show us with their names in
the debug.
2018-08-25 12:08:29 +02:00
Wim Taymans
805e3bb6c1 types: work on types
Move static pod types to type system
work on type info for types
Move the event and command ids to an enum to make it easier to extend
later.
2018-08-24 10:53:09 +02:00
Wim Taymans
fca3e1d85d Remove dynamic types
Do not use dynamic types anymore. The reason is that it's difficult:

- to maintain a shared type database over a network.
- the extra overhead when translating between processes and for
  maintaining the translation tables.
- race conditions in translating in RT-threads, this is a problem
  because we want to make event streams.

We now have simple enums with types and extension points for all
types. This is also nicer to use in general.
We don't need the mapper anymore or pass strings around as types.
There is a parallel type info system to get more info about ids and
enums and their hierarchy. It can also be used for debugging.
2018-08-23 17:47:57 +02:00
Wim Taymans
d4ab36d52a client-node: only clear ports once 2018-08-14 16:53:05 +02:00
Wim Taymans
3b1c40f17f pod: move compare and filter functions out of the library 2018-08-14 14:52:32 +02:00
Wim Taymans
899e67eb61 client-node: clear buffers when mixer is removed 2018-07-31 21:36:10 +02:00
Wim Taymans
57ef49b154 client-node: fix port implementation
Make the port forward the port methods to the node.
Fix io area when not using adapter
2018-07-31 14:28:15 +02:00
Wim Taymans
ca898a00db work on separating port mixers
Make it possible to assign an arbitary node as the port mixer.
Also remove dynamically added ports.
Improve negotiation and allocation on the mixer ports
Add some more SSE optimisations
Move float mixer from the audio dsp to the port
Remove pw_node_get_free_port() and do things more explicitly.
Handle mixer ports in client-node
2018-07-31 12:23:35 +02:00
Wim Taymans
0d148654c0 stream: add more timing info
Keep track of queued data in the stream
Pass delay field around to make it possible to know about the raw
software read/write pointer and the hardware one.
Start stream position at 0
2018-07-19 13:30:27 +02:00
Wim Taymans
cc542935ea client-node: add more generic set_io method
Replace the set_position method with set_io that allows us to share
other types of state with the client.
2018-07-12 15:33:07 +02:00
Wim Taymans
5a3eee9cac command: remove clock-update 2018-07-12 13:22:50 +02:00
Wim Taymans
1b4a0e8d5d client-node: also implement io on the node itself 2018-07-03 21:45:07 +02:00
Wim Taymans
79a3b594f9 client-node: set parent id and owner
Make sure we set the right parent id and owner for the client node
and client-stream
Move the remote id in the proxy object and use it in the stream to
get the node id.
2018-07-03 21:43:21 +02:00
Wim Taymans
c01112d6c2 node: move position calculation to the node 2018-06-22 17:38:36 +02:00
Wim Taymans
bbd5c941d2 client-stream: send node_id to client
Send the node_id of the client-stream node to the client.
2018-06-18 13:19:54 +02:00
Wim Taymans
e5629b23f3 client-node: pass position around
Pass the position from server to clients
Implement current time in stream.c using the position info
2018-06-07 11:01:20 +02:00
Wim Taymans
3d25e254ef client-node: implement node property update
Make it possible to update the node properties
Make it possible to update the remote properties
2018-06-07 10:23:41 +02:00
Wim Taymans
bf2a6bb1d7 client-node: small cleanups 2018-06-01 11:19:22 +02:00
Wim Taymans
f5f1a435cc client-node: improve time and position reporting 2018-05-24 16:10:22 +02:00
Wim Taymans
6450c64542 clean up listeners 2018-05-17 17:30:30 +02:00
Wim Taymans
bed26040ef node: add driver position struct
Pass driver info to client
use current buffersize and samplerate in client
update the buffer size dynamically based on session
2018-05-11 10:15:59 +02:00
Wim Taymans
6d79ce2589 small cleanups 2018-05-10 11:28:02 +02:00
Wim Taymans
d93dd5ec93 graph: remove io from graph port, it's not needed 2018-05-08 12:21:57 +02:00
Wim Taymans
a6cb6b740c client-node: make it possible to skip signal
Add an option to not signal the remote implementation when we still
have enough data.
2018-04-26 09:49:29 +02:00