Commit graph

5263 commits

Author SHA1 Message Date
Wim Taymans
53681c9337 client-rt: add rule for Davinci Resolve
Davinci Resolve does not manage to figure out acceptable buffer size
itself so help it a little with an override.

Fixes #1697
2023-01-25 16:43:41 +01:00
Wim Taymans
9fb44c3a71 module-rtp-source: improve buffer handling
Try to keep half the packet size in the ringbuffer as well. This helps
us adapt to the packet size of the sender.

Drop samples from the ringbuffer for the first packet we read. This
makes us lock onto the stream with the exact requested latency.
2023-01-25 16:23:00 +01:00
Wim Taymans
80a6880f33 module-rtp-sink: add tool and ptime attributes 2023-01-25 16:22:18 +01:00
Wim Taymans
6a375d5778 module-rtp-source: add match rules
Add match rules so that one can select what SAP announcements to
listen to. Also make it possible to set per session latency.
2023-01-25 14:58:15 +01:00
Wim Taymans
64dca0b36d pipewire: add conf.h to standard includes
Also fix function signature so that it matched the .h file.
2023-01-25 13:23:44 +01:00
Wim Taymans
b9a144e478 module-rtp: handle property failure better
The cleanup might want to iterate the session list so make sure it is
initialized.
2023-01-25 13:23:39 +01:00
Dmitry Sharshakov
4bf1c2946e module-rtp-sink: fix net.loop
Avoid uninitialized variable use
2023-01-25 10:39:24 +01:00
Dmitry Sharshakov
f8dfdf7b99 module-rtp-source: lower priority of frequent messages 2023-01-25 10:37:14 +01:00
Dmitry Sharshakov
974a9019d1 module-rtp-source: lower overrun log level 2023-01-25 10:36:45 +01:00
Dmitry Sharshakov
8000a55654 module-rtp-source: make incoming RTP messages more elaborate 2023-01-25 10:36:32 +01:00
Dmitry Sharshakov
f59b652142 module-rtp-source: set node name
useful for Audio/Source role
2023-01-25 10:36:17 +01:00
Dmitry Sharshakov
f2c3baf93f module-rtp-source: make SAP cleanup interval configurable
Audinate AES67 devices send SAP messages with 30-second interval, so hardcoded timeout has to be bumped. Just bumping it will reduce efficiency of common RTP module use-case, so a config is introduced for this. 70 second will be set as default for AES67 mode.
2023-01-25 10:36:08 +01:00
Wim Taymans
03cb7f3549 jack: make jack.merge-monitor default true
Make jack.merge-monitor true by default because this is what JACK also
does.

Add an exception for Mixxx because that makes it easier to select the
capture/monitor ports.

Fixes #1760
2023-01-25 09:48:28 +01:00
Wim Taymans
c8850f8766 env vars should override everything
Always first use the env var and then check the properties. So that
PIPEWIRE_CORE=pipewire-1 PIPEWIRE_REMOTE=pipewire-1 make run runs
everything on pipewire-1 sockets regardless of the config files.

Also PIPEWIRE_NODE always needs to be taken into account first.
2023-01-24 17:39:54 +01:00
Wim Taymans
782e0dfb1f pulse-server: use module-combine-stream for module-combine-sink
Implement the combine-sink module with the native module.

Make sure we use the same logic to wait with emitting the module loaded
signal until we have seen all the sink_inputs of our module.

Make sure we also use the timeout to signal module failure when we don't
see the nodes.
2023-01-24 16:04:59 +01:00
Wim Taymans
6d6cd6bbfb module-combine-sink: remove listener before core_disconnect 2023-01-24 15:41:00 +01:00
Wim Taymans
4eac50966a combine-stream: also set DONT_RECONNECT 2023-01-24 13:28:48 +01:00
Carlos Rafael Giani
59ad6c26aa pw-cat: Add fallback for the older libavcodec channel layout API
Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
2023-01-24 08:44:14 +00:00
Carlos Rafael Giani
e261f2ac1c pw-cat: Check for pw_cat_ffmpeg flag instead of HAVE_ALSA_COMPRESS_OFFLOAD
FFmpeg integration in pw-cat does not strictly require Compress-Offload;
for example, there could be other nodes in the graph that can handle
compressed audio.

Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
2023-01-24 08:44:14 +00:00
Carlos Rafael Giani
6284cf39c0 meson: Rework FFmpeg / tinycompress detection and add pw-cat-ffmpeg option
* Decouple FFmpeg integration in pw-cat from the ffmpeg option; if
  one wants to use Compress-Offload but not the ffmpeg SPA plugin,
  it is then possible to just pass -Dpw-cat-ffmpeg=enabled to meson.
  Likewise, this also makes it possible to build the ffmpeg plugin
  without extending pw-cat.
* tinycompress does not need to be detected in the root meson.build,
  since it is only needed by the alsa plugin.
2023-01-24 08:44:14 +00:00
Carlos Rafael Giani
e9a2c6aa34 Rename "compressed-offload to "Compress-Offload" in the code 2023-01-24 08:44:14 +00:00
Sanchayan Maity
55a79fd16a pw-cat: Add support for compressed formats 2023-01-24 08:44:14 +00:00
Sanchayan Maity
92344bf8ac gst: Accept MP3 and FLAC for compressed sink 2023-01-24 08:44:14 +00:00
Wim Taymans
3bfee14d7f pw-cli: add -m option to help 2023-01-24 09:14:33 +01:00
Wim Taymans
94b4fd80eb module-combine: destroy stream when unconnected 2023-01-23 18:06:07 +01:00
Wim Taymans
2db9035538 module-combine-stream: safely add/remove stream from data thread
Use invoke to sync the data thread with the main thread when adding
and removing streams.
2023-01-23 17:53:22 +01:00
Wim Taymans
29787b51ef modules: add combine-stream module
The module can:

- Make a sink that sends all or some channels to other sinks.
- Make a source that combines multiple sources into one.

The selection of what streams to combine is implemented with rules so
that the selection is very configurable. By default all Audio/Sink or
Audio/Source nodes are selected.
2023-01-23 17:06:56 +01:00
Wim Taymans
8f90446042 conf: factor out pw_conf_match_rules()
Refactor and expose the rules matching code so that it can be used
elsewhere.
2023-01-23 09:47:21 +01:00
Wim Taymans
d83f2520b6 pw-cli: silence port changes outside of monitor mode 2023-01-20 17:10:52 +01:00
Wim Taymans
74673c0862 pw-cli: suppress some output
Only print changes to object when monitoring.
Only print results from commands when interactive.
2023-01-20 16:28:50 +01:00
Wim Taymans
ca1b32393d pipewire: expose pw_impl_module_schedule_destroy()
And then remove the custom code in the example sink/source.
2023-01-20 16:10:06 +01:00
Wim Taymans
164e343dbf remove pipewire/private.h includes when possible
In many places this is not needed.
Expose pw_impl_node_set_param() for adapter.
2023-01-20 16:08:38 +01:00
Wim Taymans
ee55df9f9e alsa: add option to change the volume-method
Add option to set linear or cubic volume, cubic is now the default.
2023-01-20 10:11:49 +01:00
Martin Geier
98163d90df client-node: iterate the buffer datas correctly
Don't just read the first buffer data in the loop but use the loop index to
get the right one.
2023-01-19 17:22:29 +01:00
Wim Taymans
d11fb766c6 module-pipe: improve properties on nodes
Actually move the stream properties in stream.props object for the pipe
tunnel module.
Set pipe.filename on the node. Remap this to device.string in pulse.
Add some more default properties on the pipe nodes.

See #2973
2023-01-19 11:05:54 +01:00
Wim Taymans
cb8d9f38b2 stream: handle the case where io is NULL
Some older servers set the io area after starting the node and so the
node runs first without io areas, just return an error instead of
crashing.

Fixes #2964
2023-01-19 10:19:14 +01:00
Wim Taymans
1126fbd26c filter-chain: simplify a little
We can reuse the array of filenames for the single filename case
and remove some duplicate code.
Handle some errors better.
2023-01-18 18:22:34 +01:00
Wim Taymans
30057967dd module-filter-chain: fix array size 2023-01-18 18:06:19 +01:00
Wim Taymans
9d66de446b convolver: parse array from filename 2023-01-18 16:59:25 +00:00
Barnabás Pőcze
051d223d73 filter-chain: review suggestions 2023-01-18 16:59:25 +00:00
Dmitry Sharshakov
2251b9b1d9 filter-chain: allow multiple filters for convolver
Choose the closest match to reduce resampling loss. If match is not equal, resample.

Keep the backwards compatibility retaining `filename` property. When both set, `filenames` takes priority
2023-01-18 16:59:25 +00:00
Wim Taymans
6207d98ff1 spa: add debug log context
Make a real debug context with a log function and move it to a new file.
This way we don't need to redefine a macro.
Make a new context for debugging to a log file. Make new functions to
debug to a log file.
Move the stringbuffer to string utils.
Integrate file/line/func and topics into the debug log.
We can remove some more things from the pipewire log_object function and
also add support for topics.
2023-01-18 17:51:16 +01:00
Wim Taymans
3c67821c4a spa: add context to debug functions
Add new spa_debugc_ funnctions that take a context. The user should also
redefine the spa_debugc macro to handle the context.

Use this to let some plugins log the pod and format to the log without
using the global logger.

Also use this to remove our custom pod logger function by reusing the
spa one with a custom context.
2023-01-18 13:12:16 +01:00
Wim Taymans
f472fd736d fix includes
Only include debug we need. We usually only need the debug types.
2023-01-18 13:12:16 +01:00
Wim Taymans
37a5dca31e module-echo-cancel: update docs with monitor.mode property 2023-01-17 13:18:13 +01:00
Wim Taymans
edd3113c43 pulse-server: add remaining formats
The ones that have no pulseaudio equivalent will be filtered out when we
parse or create messages.

See !1499
2023-01-17 12:26:06 +01:00
Wim Taymans
a979c0f430 keys: don't remove deprecated symbols by default
Add a new macro to mark deprecated keys. The macro will emit a warning
about the symbol being deprecated.
PW_ENABLE_DEPRECATED will suppress the deprecation warning.
Add PW_REMOVE_DEPRECATED to completely remove the deprecated symbols.

Fixes #2952
2023-01-17 11:58:04 +01:00
Wim Taymans
ccedf1722a filter-chain: fix AVX dsp_sum index increment
Fixes #2965
2023-01-17 09:24:00 +01:00
Wim Taymans
68d9c33078 module-echo-cancel: allow per stream AUDIO_POSITION settings
Keep per stream audio info. We copy the global rate and format to
everything but allow for the channel positions to be overwritten
per stream. Invalid channel positions will revert to the default
again.

With a taget.object, this makes it possible to link the echo cancel
stream to specific pro audio sink ports.

Fixes #2939
2023-01-16 15:11:02 +01:00
Wim Taymans
e86acd8930 module-rt: improve rt settings
Refactor get_rt_priority_range().
When we can't set the requested priority, use rlimit to clamp it
and try again. If this clamped value is bigger than RT_PRIO_MIN,
we can allow this.

The result is that the RTPRIO is set to the max of the user rlimit
RTPRIO, as long as it's more than 11. Previously it would fall back
to RTKit.
2023-01-16 13:08:37 +01:00