[pulseaudio-discuss] [PATCH] sink/source: Fix restore of volume on devices without hw volume
David Henningsson
david.henningsson at canonical.com
Tue Aug 26 04:54:56 PDT 2014
Module-device-restore sets real_volume, but soft_volume remains at
max, so if a device only has soft_volume (i e no hw volume controls),
its volume was not restored correctly.
Reported-by: Richardo Salveti de Araujo <ricardo.salveti at canonical.com>
Signed-off-by: David Henningsson <david.henningsson at canonical.com>
---
Note: I haven't looked in detail what happens if the hw steps are coarse,
so we need to set both soft_volume and reference_volume from real_volume.
So it's possible this is just a bandaid.
src/pulsecore/sink.c | 4 +++-
src/pulsecore/source.c | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 274fe83..643bf8b 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -613,8 +613,10 @@ void pa_sink_put(pa_sink* s) {
* the sink implementor to set this flag as needed.
*
* Note: This flag can also change over the life time of the sink. */
- if (!(s->flags & PA_SINK_HW_VOLUME_CTRL) && !(s->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER))
+ if (!(s->flags & PA_SINK_HW_VOLUME_CTRL) && !(s->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER)) {
pa_sink_enable_decibel_volume(s, true);
+ s->soft_volume = s->real_volume;
+ }
/* If the sink implementor support DB volumes by itself, we should always
* try and enable flat volumes too */
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index aabe7ad..bc978ce 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -564,8 +564,10 @@ void pa_source_put(pa_source *s) {
* the source implementor to set this flag as needed.
*
* Note: This flag can also change over the life time of the source. */
- if (!(s->flags & PA_SOURCE_HW_VOLUME_CTRL) && !(s->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER))
+ if (!(s->flags & PA_SOURCE_HW_VOLUME_CTRL) && !(s->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER)) {
pa_source_enable_decibel_volume(s, true);
+ s->soft_volume = s->real_volume;
+ }
/* If the source implementor support DB volumes by itself, we should always
* try and enable flat volumes too */
--
1.9.1
More information about the pulseaudio-discuss
mailing list