pipewire-pulse: node name returned instead of monitor device's name after move
- PipeWire version (
pipewire --version
): 0.3.52 - Distribution and distribution version (
PRETTY_NAME
from/etc/os-release
): Fedora Linux 37 (Rawhide Prerelease) - Desktop Environment: GNOME 42.2
- Kernel version (
uname -r
): 5.19.0-0.rc1.20220610git874c8ca1e60b.18.fc37.aarch64
Description of Problem:
When using pavucontrol to change a recording device to a different monitor stream, pipewire-pulse returns the name of the node instead of the name of the monitor stream when an application calls pa_stream_get_device_name()
inside its move handler. This causes incorrect behavior in FreeDV as its stream move handler updates the program's configuration in response to device changes (see #2407 (closed)).
How Reproducible:
100% reproducible.
Steps to Reproduce:
- Create four loopback devices by running
sudo modprobe snd-aloop enable=1,1,1,1
. - Compile FreeDV with PulseAudio support from the branch used in https://github.com/drowe67/freedv-gui/pull/239 (ms-pipewire-fix):
./build_linux.sh pulseaudio
- Run FreeDV by executing
build_linux/src/freedv
. - Set up FreeDV's sound configuration (Tools->Audio Config) to use alsa_output.platform-snd_aloop.0.analog-stereo.monitor and alsa_output.platform-snd_aloop.1.analog-stereo for "Input To Computer From Radio" and "Output From Computer To Radio" respectively. For the other two devices, the computer's built-in sound card can be used.
- Click the Start button to start decoding.
- In the "Recording" tab inside pavucontrol, change one of the devices to another monitor device (for example, alsa_output.platform-snd_aloop.3.analog-stereo.monitor).
- Close and restart FreeDV.
Actual Results:
FreeDV displays a warning on next startup indicating that it can't find "alsa_output.platform-snd_aloop.3.analog-stereo" (or whatever other device selected in (6) minus ".monitor").
Expected Results:
FreeDV starts up without any warnings or errors.
Additional Info (as attachments):
-
pw-dump > pw-dump.log
: pw-dump.log -
journalctl --user --follow -u pipewire.log
: pipewire.log (this used PIPEWIRE_DEBUG=3 in pipewire's systemd configuration) -
pactl list sources
: pulse-sources.txt -
pactl list sinks
: pulse-sinks.txt