On 2015-04-27 13:34, Tanu Kaskinen wrote:
This allows customizing the default volume on a per-path basis.

The default volume for analog outputs is set to 30%, because that's
less likely to be too loud than the "default default" volume, which
is 100%. Digital outputs typically have another volume control down
the line, so for those it makes sense to keep the default at 100%.
---
  src/modules/alsa/alsa-mixer.c                          | 4 ++++
  src/modules/alsa/alsa-mixer.h                          | 1 +
  src/modules/alsa/mixer/paths/analog-output.conf.common | 7 +++++++
  3 files changed, 12 insertions(+)

diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index 2314612..e921f8b 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -2438,6 +2438,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, 
const char *fname, pa_alsa
          { "description",         pa_config_parse_string,            NULL, 
"General" },
          { "mute-during-activation", pa_config_parse_bool,           NULL, 
"General" },
          { "eld-device",          pa_config_parse_int,               NULL, 
"General" },
+        { "default-volume",      pa_config_parse_volume,            NULL, 
"General" },

          /* [Option ...] */
          { "priority",            option_parse_priority,             NULL, 
NULL },
@@ -2471,12 +2472,14 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, 
const char *fname, pa_alsa
      p->proplist = pa_proplist_new();
      p->direction = direction;
      p->eld_device = -1;
+    p->default_volume = PA_VOLUME_NORM;

      items[0].data = &p->priority;
      items[1].data = &p->description_key;
      items[2].data = &p->description;
      items[3].data = &mute_during_activation;
      items[4].data = &p->eld_device;
+    items[5].data = &p->default_volume;

      if (!paths_dir)
          paths_dir = get_default_paths_dir();
@@ -4647,6 +4650,7 @@ static pa_device_port* device_port_alsa_init(pa_hashmap 
*ports, /* card ports */
          pa_device_port_new_data_set_name(&port_data, name);
          pa_device_port_new_data_set_description(&port_data, description);
          pa_device_port_new_data_set_direction(&port_data, path->direction == 
PA_ALSA_DIRECTION_OUTPUT ? PA_DIRECTION_OUTPUT : PA_DIRECTION_INPUT);
+        pa_device_port_new_data_set_default_volume(&port_data, 
path->default_volume);

          p = pa_device_port_new(core, &port_data, sizeof(pa_alsa_port_data));
          pa_device_port_new_data_done(&port_data);
diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
index ec39fab..1141f61 100644
--- a/src/modules/alsa/alsa-mixer.h
+++ b/src/modules/alsa/alsa-mixer.h
@@ -182,6 +182,7 @@ struct pa_alsa_path {
      char *description;
      unsigned priority;
      int eld_device;
+    pa_volume_t default_volume;
      pa_proplist *proplist;

      bool probed:1;
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common 
b/src/modules/alsa/mixer/paths/analog-output.conf.common
index 17b4527..e461a53 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common
@@ -66,6 +66,10 @@
  ;                                        # cases this can increase such 
noises. Default: no.
  ; eld-device = ...                       # If this is an HDMI port, here's 
where to specify the device number for the ELD mixer
  ;                                        # control. The default is to not 
make use of ELD information.
+; default-volume = ...                   # The default volume for cases where 
no other source of good default volume is
+;                                        # available. Sources of good default 
volume include policy modules and the current
+;                                        # hardware volume, so if the path has 
hardware volume control available, then this
+;                                        # option doesn't have effect. The volume is 
given as a percentage, e.g. "30%".
  ;
  ; [Properties]                           # Property list for this path. The 
list is merged into the port property list.
  ; <key> = <value>                        # Each property is defined on its 
own line.
@@ -123,6 +127,9 @@
  ; state.plugged = yes | no | unknown   # Normally a plugged jack would mean 
the port becomes available, and an unplugged means it's
  ; state.unplugged = yes | no | unknown # unavailable, but the port status can 
be overridden by specifying state.plugged and/or state.unplugged.

+[General]
+default-volume = 30%
+

Acked if you remove this part, which IMO requires some further bikeshedding.

  [Element PCM]
  switch = mute
  volume = merge


--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to