In case a port has not yet been saved, which is e g often the case
if a sink/source has only one port, reading volume/mute will be done
without port, whereas writing volume/mute will be done with port.

Work around this by setting a default port before the fixate hook,
so module-device-restore can read volume/mute for the correct port.

BugLink: https://bugs.launchpad.net/bugs/1289515
Signed-off-by: David Henningsson <david.hennings...@canonical.com>
---
 src/pulsecore/sink.c   |   11 +++++++++++
 src/pulsecore/source.c |   11 +++++++++++
 2 files changed, 22 insertions(+)

diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 08143e9..9c4b0c3 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -235,6 +235,17 @@ pa_sink* pa_sink_new(
     pa_device_init_icon(data->proplist, true);
     pa_device_init_intended_roles(data->proplist);
 
+    if (!data->active_port && !data->save_port) {
+        void *state;
+        pa_device_port *p, *p2 = NULL;
+
+        PA_HASHMAP_FOREACH(p, data->ports, state)
+            if (!p2 || p->priority > p2->priority) {
+                p2 = p;
+                pa_sink_new_data_set_port(data, p2->name);
+            }
+    }
+
     if (pa_hook_fire(&core->hooks[PA_CORE_HOOK_SINK_FIXATE], data) < 0) {
         pa_xfree(s);
         pa_namereg_unregister(core, name);
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 2a600e2..94533df 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -222,6 +222,17 @@ pa_source* pa_source_new(
     pa_device_init_icon(data->proplist, false);
     pa_device_init_intended_roles(data->proplist);
 
+    if (!data->active_port && !data->save_port) {
+        void *state;
+        pa_device_port *p, *p2 = NULL;
+
+        PA_HASHMAP_FOREACH(p, data->ports, state)
+            if (!p2 || p->priority > p2->priority) {
+                p2 = p;
+                pa_source_new_data_set_port(data, p2->name);
+            }
+    }
+
     if (pa_hook_fire(&core->hooks[PA_CORE_HOOK_SOURCE_FIXATE], data) < 0) {
         pa_xfree(s);
         pa_namereg_unregister(core, name);
-- 
1.7.9.5

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to pulseaudio in Ubuntu.
https://bugs.launchpad.net/bugs/1289515

Title:
  Sound volume resets after making a call

Status in “pulseaudio” package in Ubuntu:
  Incomplete

Bug description:
  1. mute your phone
  2. dial a number and ensure the call is picked
  3. end the call

  What happens:
  The sound volume is set to full and the phone unmutes

  What should happen:
  Ending the call should not effect the sound volume setting.

  ProblemType: Bug
  DistroRelease: Ubuntu 14.04
  Package: telephony-service 0.1+14.04.20140303-0ubuntu1
  Uname: Linux 3.4.0-5-mako armv7l
  ApportVersion: 2.13.2-0ubuntu5
  Architecture: armhf
  Date: Fri Mar  7 23:26:43 2014
  InstallationDate: Installed on 2014-03-07 (0 days ago)
  InstallationMedia: Ubuntu Trusty Tahr (development branch) - armhf 
(20140307.2)
  ProcEnviron:
   TERM=linux
   PATH=(custom, no user)
  SourcePackage: telephony-service
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1289515/+subscriptions

-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to