Commit graph

338 commits

Author SHA1 Message Date
Peter Hutterer
7697ed0757 treewide: replace strcmp() == 0 with spa_streq()
This change is only done in source files for now, header files will be done
separately.
2021-05-18 22:10:27 +10:00
Wim Taymans
d8208c5c2d dbus: move connect to dbus in connection_get()
This way we can reset the dbus connection when we got a disconnect
and signal the event. This can then be used by the client to
do a new connection_get().
2021-05-17 13:17:27 +02:00
Wim Taymans
2dcdabd2af dbus: add events to the dbus connection
Add events to the dbus connection and notify about destroy and
disconnect.
2021-05-17 11:54:43 +02:00
Wim Taymans
40fbabd9ed dbus: listen for disconnect signal
And log a warning when our connection is lost.

See #1099
2021-05-17 10:20:28 +02:00
Wim Taymans
a80ec36ad5 node-driver: run as fast as possible in freewheel mode 2021-05-07 11:50:55 +02:00
Wim Taymans
888612dc0f conf: add freewheel driver
Add freewheel driver and enable freewheel mode on it.
2021-05-07 09:03:34 +02:00
Wim Taymans
5c41131d6d node-driver: support node.freewheel property
To activate freewheeling when initializing
2021-05-07 09:03:34 +02:00
Peter Hutterer
cc4324cd30 spa/logger: only log in colors if we're logging to a tty 2021-05-07 06:57:31 +00:00
Peter Hutterer
2405f0942b spa/buffer: rename SPA_MEMBER to SPA_PTROFF
SPA_MEMBER is misleading, all we're doing here is pointer+offset and a
type-casting the result. Rename to SPA_PTROFF which is more expressive (and
has the same number of characters so we don't need to re-indent).
2021-05-06 09:39:39 +00:00
Wim Taymans
ebe5fa7809 dbus: clean up sources and connections
Set source user data for all dbus sources and set a destroy notify
when removed.
Remove the dbus user data to remove the source user data.
Clean up remaining sources when destoying a connection
Clean up remaining connections when freeing the dbus plugins.

Fixes #1114
2021-05-01 09:33:06 +02:00
Wim Taymans
ca72738fee dbus: add some more debug in the plugin 2021-04-30 12:23:10 +02:00
Wim Taymans
f95ecf95ba spa: don't overrun the input array
Read one byte less than the size of the buffer so that we still have
room in the buffer to append the 0 byte.
2021-04-17 19:43:55 +02:00
Wim Taymans
f27ad659f8 spa: add property to force VM
Also add PIPEWIRE_VM to force a VM type.
2021-04-16 16:50:34 +02:00
Wim Taymans
ce828af9e1 spa: add cpu method to get the VM type
Make a method to query the VM we are running on.
2021-04-16 16:50:34 +02:00
Peter Hutterer
223f20709d meson: replace join_paths(a, b) with a / b
More readable and from the meson reference manual:
(since 0.49.0) Using the/ operator on strings is equivalent to calling join_paths.
2021-04-15 06:57:00 +00:00
Wim Taymans
b318a9e1d3 support: add right property id 2021-04-01 10:08:47 +02:00
Wim Taymans
f26c642055 loop: initialize some variables
Just in case the read fails.
2021-03-27 19:23:34 +01:00
Wim Taymans
fc9a6d6b1e spa: spa_json_get_string does not return the length
The returned string is null terminated.
2021-03-18 18:57:26 +01:00
Wim Taymans
8e590df92f spa: improve info parsing
Make info parsing a bit easier to read by assigning the key and
value to temporary variables.
Improve the parsing of channelmap using json parser to make it
support more cases.
Add a unit test for channelmap parsing options.
2021-03-18 18:40:56 +01:00
Wim Taymans
da5c43fb33 logger: printf \n even when colors disabled 2021-03-13 20:36:23 +01:00
Thibault Saunier
485bae5eb0 meson: Use feature options everywhere it makes sense 2021-03-10 20:18:34 +00:00
Wim Taymans
4f816c1fb0 loop: never try to block in the thread
When we are calling invoke from the thread, the call will be completed
in the thread and there is no need to block for completion.
2021-03-10 13:01:19 +01:00
Wim Taymans
9662bc96ab null-audio-sink: support and prefer planar F32P
It's easier to convert to and also the native format for the converter
so that it can operate in passthrough mode without any copies.
2021-02-26 21:15:14 +01:00
Wim Taymans
08ba6097a1 loop: align buffer and invoke_items to 8 bytes
To avoid unaligned access messages from sanitizer

See #497
2020-12-21 20:46:13 +01:00
Wim Taymans
c6f94def08 null-sink: fix null sink scheduling
The null sink pulls in data and provides data after it got the
data in _process.

See #472 #442
2020-12-14 10:21:13 +01:00
Wim Taymans
57886c1198 spa: add audio.position support in null sink 2020-12-02 12:59:50 +01:00
Wim Taymans
4c486c7ae3 spa: remove media.class from null-audio-sink
We can use it with othe media.class values as well
2020-12-02 11:47:08 +01:00
Wim Taymans
d77c563ae8 null-audio-sink: return fixed values for rate/channels when set 2020-11-26 10:21:36 +01:00
Wim Taymans
c3138a9bac spa: make null-sink rate and channels configurable 2020-11-25 21:05:21 +01:00
Wim Taymans
04aa5472d3 journal: make it possible to set level from info 2020-11-18 17:42:47 +01:00
Wim Taymans
0d9cc9e36e loop: always place the invoke item in the queue
Always place the invoke item in the queue and then either signal the
other thread or flush the queue when not already flushing.
2020-11-16 15:16:20 +01:00
Wim Taymans
b8b2ce6ba9 loop: always wake up blocking items
We should always wake up the blocking items if we scheduled the
item.
2020-11-13 16:50:23 +01:00
Sergey Bugaev
c101ff2057 support: add a journald logger implementation
Closes https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/358

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
2020-11-06 15:51:24 +00:00
Wim Taymans
6eaf8d6921 spa: remove property, we don't implement a getter 2020-10-28 10:51:08 +01:00
Wim Taymans
1b7d052098 support: remove useless assignment 2020-10-16 13:11:27 +02:00
Wim Taymans
664ecbefee loop: move debug to _fp 2020-09-30 12:01:23 +02:00
Wim Taymans
a9c0435317 loop: don't recursively flush
If we are already in the loop thread and flushing, this means we
added a new invoke item on the list from a callback. Place the
item on the queue and let the flush code take care of it after the
callback completes.

Required to fix some issues with draining in pulse where a stream
is destroyed from the drained callback which then invokes a pause.
2020-09-17 11:46:55 +02:00
Wim Taymans
e5f7e040dc loop: simplify before and after events
Because the signal can't be removed from the callback we can
simply iterate backwards and then forwards.

The first added hook (the unlock/lock pair) is called last before
going into the poll and first when leaving. This executes all other
callbacks inside a locked situation. And removing them with the lock
is not going to cause problems.
2020-09-16 13:31:47 +02:00
Wim Taymans
05ae8a24de loop: make safe version of befor and after signal
Use a safer version of the before and after hooks. First call
all before hooks and save them in reverse order in a save list.
Then call the after event for the ones remaining in the save list
and move them back to the hook list.

This makes it possible to remove the hooks from one the callbacks or
even from other threads with the right locks. Found as a solution to
the following problem as observed in vlc:

main thread                            thread_loop

pw_thread_loop_lock()            before hook: lock suspend thread
pw_context_destroy()
  - removes before hook to flush clients
pw_thread_loop_unlock()
                                 before hook: lock acquired, resume
				 before hook: flush client hook executed
				   *crash*

pw_thread_loop_stop()
pw_thread_loop_destroy()

Any of the safer cursor methods (like spa_hook_list_call()) would also
work but are more expensive and don't reverse the before/after
order.
2020-09-15 20:13:32 +02:00
Wim Taymans
e8640683bb support: add null audio sink 2020-08-20 18:00:00 +02:00
Wim Taymans
9b4b7d1a2c evl: add include for spa_strerror
See #244
2020-07-14 14:19:26 +02:00
Wim Taymans
bb1cb530fc add more debug of fd create and close 2020-06-02 14:06:51 +02:00
Wim Taymans
7f60ebff27 logger: handle file without '/' in it 2020-05-29 20:32:55 +02:00
Wim Taymans
6203fb967c log: make line==0 suppress the file/line/func output
Disable file/line/func output for pod debug
2020-05-07 20:42:52 +02:00
Wim Taymans
2220d5b9b6 support: add dummy driver
Add a dummy driver node with high priority. All nodes not linked
to a device node will be linked to this when they require a driver.
2020-04-27 20:21:31 +02:00
Wim Taymans
93211549a4 log: add option to disable line numbers 2020-04-27 11:18:49 +02:00
Wim Taymans
d1beeeade0 loop: handle file fd with eventfd
epoll return EPERM for file fds like stdin/stdout because they are
always ready for IO. use an idle source to handle these cases.
2020-04-14 18:05:45 +02:00
Wim Taymans
a5b0553328 Fix some -Wenum-conversion errors
Make pw_direction and spa_direction the same
Explicitly cast some enums or use the right enums
2020-04-04 20:03:08 +02:00
Wim Taymans
cb7bfdf98a sprinkly SPA_LIKELY/UNLIKELY around 2020-03-16 12:52:28 +01:00
Wim Taymans
bdeeebfdd4 enable and fix -Werror=suggest-attribute=format 2020-02-20 18:20:04 +01:00