Commit graph

97 commits

Author SHA1 Message Date
George Kiagiadakis 59407d2f08 includes: update all references to extensions to point to pipewire/extensions
This also brings the advantage that all tools, examples, modules, components
can also be compiled standalone out-of-tree using libpipewire from the system
2021-06-18 17:54:18 +03:00
Peter Hutterer da339c286f meson.build: drop HAVE_CONFIG_H
This is an autotools leftover, with meson we're always guaranteed to have
the config.h file.
2021-06-10 09:04:16 +10:00
Peter Hutterer 0054319d88 meson.build: add -D_GNU_SOURCE to the project arguments
This appends it to every compilation command so we can get rid of the c_args
for (almost all) executables.
2021-06-09 07:47:51 +00:00
Peter Hutterer e0471c6757 pipewire: allow NULL pointers in pw_properties_free()
Just like the real free() we should just ignore a NULL pointer, makes the
caller code easier for those instances where properties are optional.

Patch generated with concinelle with a few manual fixes.
2021-06-02 10:56:46 +00:00
Wim Taymans 5a186ece01 alsa: handle plugin errors better
When the plugins can't be loaded, we fail to make a main_loop.
Handle this case instead of segfaulting.

See #1239
2021-05-28 11:38:02 +02:00
Peter Hutterer f3f915e897 pipewire-alsa: fix scan-build errors for unused variables
All cases of value stored but never read
2021-05-26 07:51:27 +00:00
Peter Hutterer 522f87d5ea 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
Peter Hutterer 95a84e797a treewide: replace !strcmp() 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
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 0999f3cf93 alsa-plugin: handle context create error 2021-05-10 13:28:36 +02: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
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 877309bfbe use priority.session to select the default sink/source
priority.session is meant to be used to set routing priorities.

priority.driver is meant to be used by the scheduler to select what
nodes is best for driving the graph. This usually depends on the
hardware quality and the use case (Pro Audio devices are likely
to be used as driving the graph).

See #1028
2021-04-08 17:48:13 +02:00
Wim Taymans f314119aa9 alsa-plugin: add some checks to avoid using invalid values 2021-03-27 20:44:21 +01:00
Wim Taymans c8fd34a41d metadata: store default-nodes as JSON
Don't just store the id in the metadata but a JSON object with
the node name. This makes it possible to easily introspect the
metadata and also extend the metadata with more fields later.

Instead of matching the metadata id to the global ids we now
have to match it against the name.
2021-03-05 17:37:12 +01:00
Wim Taymans 184bdbeb4c alsa-plugin: Implement query_chmaps again
Return a list of our supported channel positions.

Fixes #825
2021-03-04 11:56:28 +01:00
Jonas Holmberg 29be757598 pipewire-alsa: fix drain for capture
Since pw_stream doesn't call the drained callback after flush for
capture it has to be called explicitly from process.
2021-03-03 19:00:13 +00:00
Wim Taymans 0aadc0450d alsa: implement poll_descriptors
In there we can evaluate the poll fd and make sure it blocks or not
in the following poll based on the buffer filled levels. Some API
is very sensitive about this, it seems.

Fixes #433
2021-03-02 15:03:27 +01:00
Wim Taymans 8386ddff78 alsa-plugin: Fix default channel layout
We need to use the default channel layout that alsa clients expect.
Remove query chmap, nobody uses that, we need to use the alsa default
channel map.
Implement set_chmap in case anybody wants to set a custom map.
2021-02-25 17:42:32 +01:00
Wim Taymans 555d5db384 alsa: make sure we are started when draining
We need to be started before waiting for drain.

Fixes #787
2021-02-25 12:14:42 +01:00
Wim Taymans b9241b1d73 alsa: set application.name 2021-02-19 10:06:40 +01:00
Wim Taymans 7053936ffd don't attempt to connect to empty remote name
Fixes jconvolver startup.

See #744
2021-02-18 10:22:39 +01:00
Wim Taymans 972e740519 Don't advertize formats we don't yet support
We don't handle the reverse endian formats yet so make sure we
don't advertize them.
2021-02-05 12:12:44 +01:00
Wim Taymans 32a3913933 alsa-plugin: use MIN_BUFFERS for max as well
To get a more reasonable max
2021-02-04 17:15:46 +01:00
thedannysmith 5e9246e1f7 alsa-plugin: change hw-constrainy buffer-size 2021-02-04 17:14:19 +01:00
Wim Taymans 62cf8c6130 alsa-plugin: improve client name 2021-02-04 12:52:23 +01:00
Wim Taymans 675a12ef33 alsa: clamp elapsed time to delay
If the elapsed time is larger than the delay, we are dealing with
an older timestamp.

Fixes #597
2021-01-20 11:54:19 +01:00
Wim Taymans fd520c4b39 alsa-plugin: set buffer size correctly
Our output buffer size is always what is needed to produce one
period of samples. We use nframes from the hardware and the rest
we fill with silence.
2021-01-18 10:03:19 +01:00
Wim Taymans d2aee61880 alsa: don't write more than wat is requested 2021-01-17 17:20:59 +01:00
Wim Taymans b4e3d546e0 alsa: fill frames with silence when underrun
Keep track of how many samples we need to produce. If we don't have
enough samples in the ringbuffer, fill the rest with silence.

See #564
2021-01-15 18:34:38 +01:00
Wim Taymans 5817b66a20 alsa-plugin: only parse props when updated
Check if the properties got update before we try to parse them.
If they are not updated, they might be empty and we would lose
our previously parse values.

Fixes default volume in alsa-mixer.
2021-01-15 10:29:32 +01:00
Wim Taymans 0c2b4df8e5 alsa: implement _delay to get smoother timestamps
Fixes #536
2021-01-09 10:50:39 +01:00
Wim Taymans 3f0cadfa00 alsa: use rate_match to read exactly what we need
Use the rate match from the resampler to get the exact amount
of samples we need to provide in this cycle.
2021-01-08 16:55:24 +01:00
Wim Taymans 55c5e48578 alsa: set offset to 0 for playback streams 2020-12-18 15:32:27 +01:00
Wim Taymans b8300c663b improve some errors
Silence some -ENOENT warnings, they can happen when the object we
are introspecting is destroyed
2020-11-29 16:22:50 +01:00
Elliott Sales de Andrade 0a30eb6329 Fix a possible uninitialized variable.
Also, change the type to more accurately reflect its usage.
2020-11-23 15:36:08 +00:00
Oschowa 92c541ea03 pipewire-alsa: Make sure to always fill the pipewire buffers with
silence on process if there is not enough data.
This fixes noise with the retroarch alsa backend on pause, which doesn't
actually pause the device.
2020-11-01 19:28:38 +01:00
Oschowa 86acbabe8f pipewire-alsa: implement pause 2020-11-01 19:04:37 +01:00
Oschowa d960724dfc pipewire-alsa: fix inconsistent formating (tabs vs. spaces) 2020-11-01 18:38:46 +01:00
Wim Taymans e571c0bcb1 alsa: Use "PipeWire ALSA" as the node name
So that it is easier to know it is the PipeWire one.
2020-10-27 16:11:14 +01:00
Mersad Jelacic 9de98df1b7 pipewire-alsa: Use monotonic clock
Use monotonic clock instead of gettimeofday for timestamps.
2020-10-27 14:53:17 +00:00
Wim Taymans 3567efb7f8 alsa: allow setting playback/capture_node as node name
See !314
2020-10-24 15:53:48 +02:00
Jan Grulich 743cf58fb7 Define SPA_FALLTHROUGH to make fall-through annotations work for all compilers
This is needed for example for Clang compiler which uses different
annotations than GCC. It will make WebRTC to happily use PipeWire
since the spa library is header-only and WebRTC defaults to use
Clang with -Wimplicit-fallthrough.
2020-10-22 13:31:19 +02:00
Wim Taymans 1bd31c1cf1 don't force a MEDIA_ROLE property
The application has to set a media role.
2020-10-14 12:11:35 +02:00
Wim Taymans 9dfd261c71 add some more debug info 2020-09-25 17:01:52 +02:00
Wim Taymans 368366b88d alsa: avoid loading the plugin when linked against 0.2
chromium is linked against 0.2, avoid trying to load the alsa
plugin that is linked against 0.3

See #275
2020-09-07 17:41:50 +02:00
Wim Taymans b6e84ded75 alsa: protect against SIGPFE
Make sure we don't try to divide by 0 when the app calls the status
before we are PREPARED.

Fixes #283
2020-09-07 14:57:47 +02:00
Wim Taymans 030bef8dd3 alsa: use PIPEWIRE_PROPS for extra stream properties 2020-09-04 16:53:45 +02:00
Wim Taymans 64ee110356 alsa: rework process function to support planar formats 2020-09-04 15:40:22 +02:00
Wim Taymans bfc91c27a6 alsa: implement planar formats some more 2020-09-04 13:49:51 +02:00