Commit graph

4031 commits

Author SHA1 Message Date
Jonas Ådahl 15b4c58e80 gst: Don't ask for DMA buffers
Gstreamer simply mmap()s the DMA buffers. This can be very very slow on
some hardware, so don't ask for it. For gstreamer to support DMA
buffers, it will need to support a proper way of transferring the
buffers from the GPU to the CPU, e.g. using EGL/OpenGL.
2021-11-11 10:22:37 +00:00
Peter Hutterer 671410b3bf pw-mon: add support for colored output
Same CLI as pw-dump, i.e. -N, --no-colors, --color=always etc are
supported.

This uses a for-loop macro hack to automatically print prefixes and
suffixes, the with_prefix() macro resolves into the correct printf
statements to insert either just the marker "*" or the ansi sequences
for color/reset. Use of the macro is simply:
```
   with_prefix(true, stderr) {
	fprintf(stderr, "this will be prefixed\n");
   }
```
2021-11-11 08:21:58 +00:00
Peter Hutterer cafe94efc2 pw-mon: switch the changed marker from single char to string
Prep work for coloured output where the prefix/suffix may be multiple
characters if ANSI sequences are used.
2021-11-11 08:21:58 +00:00
Peter Hutterer 2531ab0acd pw-mon: switch to use stderr everywhere
Most of pwmon's output uses spa_debug() or some related helper which
prints to stderr. Let's switch our explicit printfs over so we can
redirect the whole thing in one go.
2021-11-11 08:21:58 +00:00
columbarius 06b0512b22 examples: video-play-fixate.c add fallback for older PipeWire versions
The posibility to drop single modifier was added in this development
circle (after 0.3.39 release). To have clients work with older versions
of PipeWire dropping all modifiers can be an option.
2021-11-10 22:23:30 +00:00
columbarius 1c922958bc examples: video-src-fixate.c cleanup example
Cleanup printed messages and rename memfd.
2021-11-10 22:23:30 +00:00
columbarius ed3be2114c examples: video-play-fixate.c remove fixated check 2021-11-10 22:23:30 +00:00
Nicolai Syvertsen a84cfac28a Only handle -EPIPE eerrors. 2021-11-10 19:26:03 +00:00
Nicolai Syvertsen 7b773433f4 pipewire-pulse: add manager disconnect event
Drop client connections when pipewire goes away. pipewire-pulse daemon can remain running and pulseaudio clients will be able to connect again once pipewire is up and running.
2021-11-10 19:26:03 +00:00
Barnabás Pőcze df3ea8dafa pipewire: module-profiler: destroy event source
Even though all event sources are kept in a list in the current
implementation of the event loop in the SPA support plugin, relying
on it freeing all sources could lead to unbounded memory use
if the profiler module is loaded and unloaded over and over again.
2021-11-10 14:05:35 +00:00
Barnabás Pőcze d4e4b5df98 pipewire: module-profiler: handle global's destroy event
Handle if the global is destroyed (e.g. `pw-cli destroy X`) to
avoid a use-after-free in `pw_global_destroy()` when it is called
with a dangling pointer from `module_destroy()`.
2021-11-10 14:05:35 +00:00
Barnabás Pőcze 336e4d5f03 pipewire: module-echo-cancel: aec-webrtc: use unique_ptr
Use `std::unique_ptr<>` to clean up memory in the destructor
instead of manually freeing resources in the destroy callback
and error code paths.
2021-11-09 22:27:31 +01:00
Barnabás Pőcze 5896083545 pipewire: module-echo-cancel: aec-webrtc: use appropriate casts
Use the suitable C++ cast instead of C-style casts.
2021-11-09 22:27:03 +01:00
Barnabás Pőcze 144face6ad pipewire: module-echo-cancel: aec-webrtc: use getters with default
Instead of get-check-parse, use `pw_properties_get_bool()`
which does all three in one convenient function.
2021-11-09 22:27:01 +01:00
Barnabás Pőcze 175efc4c1d pipewire: module-echo-cancel: avoid extra allocation
Use `pw_properties_setf()` instead of `calloc()` +
`sprintf()` + `pw_properties_set()` + `free()`.

Furthermore, check the return value of `sscanf()`.
2021-11-09 22:02:55 +01:00
Wim Taymans c9fc3d7f42 pulse-server: don't process while the stream is created
When the stream is still being created, avoid doing any processing
because some things might not be configured yet.
2021-11-09 16:29:46 +01:00
Wim Taymans daf761a87f utils: export pw_getrandom
Export the symbol and move it to utils.
2021-11-09 16:16:30 +01:00
Wim Taymans 62509f23d7 impl-core: pass data to listener user_data
So that we can get to the registry resource.
2021-11-08 12:56:00 +01:00
Wim Taymans 5ed4977b38 destroy proxies when global is removed
When a global is removed, also remove the proxies. We can have multiple
proxies to a global otherwise when a client has a sequence of events
queued from the server like this:

Global 1 added
Global 1 removed
Global 1 added

The proxy we added in the firt event would not be destroyed because the
server did not know about it when global 1 was removed and then a
second one would be made.
2021-11-08 12:55:41 +01:00
KangJing Huang (Chaserhkj) bb407e8153 Wire up webrtc aec parameters to args 2021-11-06 05:20:33 -04:00
Wim Taymans 743f699193 pulse-server: try to not put pointers in info messages
It's not very helpful, prefer to use human readable strings and move the
more techincal stuff in debug messages.
2021-11-05 16:22:22 +01:00
Wim Taymans 2f3e65c049 pulse-server: leave the draining state
Use pw_stream_set_active() to leave the draining state so that our
process methods are called again and we can resume.
2021-11-05 15:47:49 +01:00
Wim Taymans 90fe579b29 stream: make _set_active(true) leave the draining state
If the stream is drained, make _set_active(true) leave the draining
state so that the process() events are emitted again and buffers will
be pushed().
2021-11-05 15:45:55 +01:00
Wim Taymans 0cccff517b pulse-server: send the drained event only once
Only send the drained command once. pw-stream keeps on emitting drained
events as longs as the stream is drained.
2021-11-05 15:42:33 +01:00
Wim Taymans 6ca297797f pulse-server: ensure latency is multiple of frame_size 2021-11-05 13:31:09 +01:00
Wim Taymans b96f15d2fe pulse-server: improve latency setup a little
Reorganize the latency setup in one place, return a desired device
latency for use as quantum.

PulseAudio assigns half of the (tlength - minreq) latency to the sink
but we can't do that because our sinks have a max-quantum of latency.
Fix this by clamping our calculated sink latency to the quantum

PulseAudio subtracts the sink latency from the tlength in adjust latency
mode, so we need to do the same.

This makes PULSE_LATENCY_MSEC values bahave more like pulseaudio.

See #1769
2021-11-04 18:07:30 +01:00
Wim Taymans 86ca0f8466 acp: improve debug of channel map
Increase the size of the channel_map debug printf buffer.
Use a safer version of the snprintf that avoids buffer overruns.

See #1781
2021-11-04 16:41:32 +01:00
Wim Taymans efd8ac25e3 pulse-server: don't emit _removed without havine emitted _added
Don't emit _removed for objects that are still being created because
we did not emit an _added signal for them yet.
2021-11-04 12:50:18 +01:00
Wim Taymans b0e3e43c42 pw-mon: destroy proxies in global_remove event
Keep track of the proxies and remove them when the global is removed.
Otherwise we might end up in a case where the have 2 proxies when
an add/remove/add sequence of messages was queued.
2021-11-03 17:25:11 +01:00
Wim Taymans f70fdf5605 pulse-server: also remove creating objects
When an object is created, it is marked creating until all roundtrips
complete. If the object is removed in between, we don't remove it
because find_object does not return creating objects.

Make find_object also return the creating objects to fix this.
2021-11-03 16:57:41 +01:00
Wim Taymans 73bf30efa6 module-zeroconf: translate audio format
The audio format in the avahi messages is in pulseaudio format so
translate it to PipeWire format in audio.format.

See #1745
2021-11-03 12:54:58 +01:00
Thomas Weißschuh 7d9b49293c core: add runtime fallback for nonpresent getrandom() sycall
The current compile-time-check only tests for the getrandom() syscall
wrapper of libc. The presence of this wrapper however does not relate to
the presence of the actual syscall at runtime.
2021-11-02 17:55:24 +01:00
Pauli Virtanen bbc2136e89 meson: ensure all examples are included in doc
Move declaration of examples to use same file lists for build and docs.
2021-11-02 09:46:14 +00:00
Wim Taymans 3c8a60944f pipewire: handle NULL plugin_dir
We can't load plugins when the plugin directory is unspecified, either
in config.h or with SPA_PLUGING_DIR in the environment.

Fixes #1774
2021-11-02 09:18:42 +01:00
Wim Taymans 9facfca45b jack: add option to disable monitor ports
Add a jack.show-monitor option (default true) that makes it possible
to hide the monitor ports.

Monitor ports are not enabled by default on JACK and maybe they also
should not for PipeWire. Or maybe we need some tweaks for some apps.

See #1760
2021-10-29 09:27:46 +02:00
Wim Taymans f39f9b207b map: don't mix insert_at() and _remove()
You are supposed to allocate with _insert_new()/_remove() or use
someone elses allocated number with _insert_at(), never mix the
two or it will give an error.
2021-10-28 09:36:41 +02:00
Simon McVittie f6b1d65e35 core: Use /dev/urandom for getrandom fallback
Sami Farin pointed out on #833 that on Linux kernels older than 5.6,
/dev/random blocks when entropy estimates are too low, whereas
/dev/urandom does not.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2021-10-28 07:15:50 +00:00
Wim Taymans 3509962f3a module-session-manager: don't leak the impl structure
We need to remove the listener for the object as well so that we
can safely free the impl memory.
2021-10-27 17:41:32 +02:00
Wim Taymans 2112a7287b tests: add new ABI test for stream 2021-10-27 11:31:39 +02:00
Wim Taymans a84e43e3ee examples: update some examples with RequestProcess
Let video-src unconditionally call _trigger_process() when it is
ready. This will either start the graph when it is the driver or emit
a RequestProcess event to the driver.

Let video-play-pull intercept the RequestProcess command and use it
to do a trigger_process(). Otherwise use a timer to pull in the next
frame.
2021-10-27 11:20:06 +02:00
Wim Taymans baca092ba5 stream: emit the RequestProcess event
Emit the RequestProcess event when pw_stream_trigger_process() was
called but we are not the driver node.

Fixes #1728
2021-10-27 11:19:56 +02:00
Wim Taymans b5080a0395 node: dispatch RequestProcess event and command
The event is send to the driver node.
The command is sent to node directly.
2021-10-27 11:16:53 +02:00
Wim Taymans 7529e7c47c stream: add trigger_done event
It is emited after the graph cycle that was started with
trigger_process() completed.
2021-10-27 11:15:29 +02:00
Wim Taymans 0982c903eb fix example a little 2021-10-27 11:09:24 +02:00
columbarius 110aac8c6f examples: video-play-fixate announce ParamBuffer after fixation
This lets the fixation finish. Can this be made unneeded?
2021-10-27 11:09:24 +02:00
columbarius 9f34885174 examples: Create source and sink with fixation on format negotiation
This commit uses the video-src-alloc and video-play-reneg templates to create
examples for manual fixation at the format negotiation phase. These
clients simulate modifier negotiation done by clients handling DmaBufs.

Note: Neither client is capable of proper DmaBuf handling!

video-play-fixate can be used to test if a producer is capable to
fallback to shm buffer transport, while video-src-fixate can only be
used with the former example!
2021-10-27 11:09:24 +02:00
Wim Taymans 0568958856 impl-link: keep on negotiatiating until fixed Format
Send unfixed Format to nodes but don't proceed to the next state.
When EnumFormat is emited, change the link state back to INIT to restart
the negotiation.

Fixes #1732
2021-10-27 11:09:07 +02:00
Tom Briden 6cea8b201b meson: Allow session-managers option to be an absolute path
If it's not an absolute_path, then set the build_ms and build_wp
as normal, otherwise use the value as passed in.
2021-10-27 08:27:53 +00:00
Simon McVittie e167123667 Reinstate compatibility with older Linux with no getrandom()
Commit 42d8b2b1 "Remove legacy FreeBSD compatibility code" removed
compatibility with old versions of FreeBSD, but also removed
compatibility with old versions of Linux and glibc, which was requested
in #833.

This partially reverts commit 42d8b2b167.

Resolves: #833
Signed-off-by: Simon McVittie <smcv@collabora.com>
2021-10-26 19:32:02 +01:00
Wim Taymans a2f06be199 pulse-server: Improve combine sink properties
Make streams and sink have the same description so that they show
up as the same node in catia.
2021-10-26 10:50:28 +02:00