diff --git a/NEWS b/NEWS index 355281c61..4a9237bc8 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ ver 0.23.8 (not yet released) - alsa: fix setting volume before playback starts - pipewire: fix crash bug - pipewire: fix volume change events with PipeWire 0.3.53 + - pipewire: don't force initial volume=100% * support libfmt 9 ver 0.23.7 (2022/05/09) diff --git a/src/output/plugins/PipeWireOutputPlugin.cxx b/src/output/plugins/PipeWireOutputPlugin.cxx index a64471a15..524ab3d87 100644 --- a/src/output/plugins/PipeWireOutputPlugin.cxx +++ b/src/output/plugins/PipeWireOutputPlugin.cxx @@ -89,8 +89,12 @@ class PipeWireOutput final : AudioOutput { /** * The current volume level (0.0 .. 1.0). + * + * This get initialized to -1 which means "unknown", so + * restore_volume will not attempt to override PipeWire's + * initial volume level. */ - float volume = 1.0f; + float volume = -1; PipeWireMixer *mixer = nullptr; unsigned channels; @@ -669,12 +673,14 @@ PipeWireOutput::ParamChanged([[maybe_unused]] uint32_t id, if (restore_volume) { restore_volume = false; - try { - ::SetVolume(*stream, channels, volume); - } catch (...) { - FmtError(pipewire_output_domain, - FMT_STRING("Failed to restore volume: {}"), - std::current_exception()); + if (volume >= 0) { + try { + ::SetVolume(*stream, channels, volume); + } catch (...) { + FmtError(pipewire_output_domain, + FMT_STRING("Failed to restore volume: {}"), + std::current_exception()); + } } }