pipewire/spa/plugins
Daniel Nouri e29d851d2c alsa: Fix IEC958 digital output not unmuted on path activation
When selecting an HDMI/DisplayPort (IEC958) output path, the hardware
mute switch remains in kernel default state (muted), causing no audio
output despite correct software routing.

Root cause: pa_alsa_path_select() only sets mute switches when
mute_during_activation is enabled. No mixer paths enable this setting,
making the switch configuration code unreachable for IEC958 paths.

Solution: Always set mute switches to match device mute status after
path activation, regardless of mute_during_activation setting.

Testing: Added test-alsa-path-select tool to verify the fix.
- Loads mixer path and calls pa_alsa_path_select()
- Verifies switch states match expected values
- Tested on AMD Radeon HDMI and Realtek ALC257 analog

Manual verification:
- Before: IEC958 switch OFF, no audio
- After: IEC958 switch set correctly, audio works

This bug was inherited from PulseAudio's ALSA mixer path code where
HDMI path configurations lack IEC958 unmute sections.

Fixes: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3261
See-Also: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/562
See-Also: 33be660e4b
See-Also: https://bugs.launchpad.net/hundredpapercuts/+bug/681996
2025-10-31 08:22:44 +00:00
..
aec spa: aec: webrtc: Expose echo canceller mobile_mode 2025-07-09 13:02:18 -04:00
alsa alsa: Fix IEC958 digital output not unmuted on path activation 2025-10-31 08:22:44 +00:00
audioconvert adapter: only recheck formats when convert EnumFormat changed 2025-10-30 17:41:24 +01:00
audiomixer Add support for mappable buffers in mixer-dsp 2025-10-04 10:04:50 +00:00
audiotestsrc spa: use safe IO_Control parsing 2025-07-31 11:23:30 +02:00
avb modules: support audio.layout where we can 2025-10-30 12:29:31 +01:00
bluez5 treewide: remove some obsolete channel checks 2025-10-24 10:31:45 +02:00
control control: unit test for event sort 2025-09-17 13:42:12 +02:00
ffmpeg spa: use log topics everywhere 2024-03-11 18:45:21 +02:00
filter-graph spa: make a function to make a channel short name 2025-10-22 13:04:53 +02:00
jack *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
libcamera spa: libcamera: device: adapt to libcamera change 2025-10-08 13:23:11 +02:00
support modules: support audio.layout where we can 2025-10-30 12:29:31 +01:00
test spa: make the wave, pattern and ditherType Int 2025-06-13 10:06:09 +02:00
v4l2 treewide: map SPA_PROP_exposure to V4L2_CID_EXPOSURE_ABSOLUTE 2025-09-05 17:26:44 +02:00
videoconvert audioadapter: renegotiate when driver changes 2025-10-28 08:32:03 +01:00
videotestsrc loop: spa_loop_invoke -> spa_loop_locked where possible 2025-05-30 11:59:35 +02:00
volume treewide: access the position information using helpers 2025-10-21 13:06:25 +02:00
vulkan spa: vulkan: map VK_INCOMPLETE to ENOSPC 2025-07-12 19:54:14 +00:00
meson.build filter-chain: move the filter-graph to plugins 2024-11-13 11:12:06 +01:00