[pulseaudio-discuss] ask about the assumption of min volume and max volume got from ALSA

Lu Guanqun guanqun.lu at intel.com
Thu May 26 01:36:47 PDT 2011


Hi Col,

On Thu, May 26, 2011 at 04:30:03PM +0800, Colin Guthrie wrote:
> Hi,
> 
> 'Twas brillig, and xing wang at 26/05/11 04:52 did gyre and gimble:
> > Would you please give some comments about Guanqun's patch?
> > We're working on Pulseaudio and meet some bugs, i think we will run
> > faster with community's help.
> 
> Absolutely!
> 
> To be honest tho', I was hoping Tanu or David would give their takes on
> this patch (which they may still do) as they have a better grasp of the
> audio control side than I do.
> 
> 
> One thing I will say is that PA will use the info from alsa in such a
> way as to provide a consistent dB range further up the stack.
> 
> We take the alsa-provided 0dB point and mark that as our "Base volume"
> this is exposed e.g. in the pavucontrol and gnome-volume-control GUI's
> 
> This base volume is meant to indicate the "cleanest" path through the h/w.
> 
> This might not be super relevant to the specific issue in question, but
> that's a little background on the dB levels exposed by alsa, but I get
> the impression the volumes you're talking about are not dB related?

Yes, you're right. The volume here is not related to dB. It's just plain
volume number I got from ALSA via this API (snd_mixer_selem_get_playback_volume_range).
In some ALSA drivers, I got the min_vol to be less than zero. So when I
try to set it to be a constant volume, it fails to do so.

> 
> 
> Looking at your patch, it seems logical enough (although for internal
> code, I'd use pa_bool_t + TRUE/FALSE values, but that's just a minor
> observation), so if Tanu ACKs it, I'd happily merge it.

I'll change it to bool and send another separate patch for it.

> 
> Cheers
> 
> Col
> 
> 
> > thanks
> > --xingchao
> > 
> > 2011/5/25 Lu Guanqun <guanqun.lu at intel.com>:
> >> Hi,
> >>
> >> This patch needs a little more love. :)
> >> No one cared?
> >>
> >> On Wed, May 25, 2011 at 02:17:18PM +0800, Lu Guanqun wrote:
> >>> Hi list,
> >>>
> >>> I may not have the background on this issue, but from the code, it seems
> >>> the code assumes min_volume and max_volume should be non negative. Is
> >>> this the right assumption we should take? What about some drivers
> >>> exposes that min_volume is -126 and max_volume is 0? Should we fix the
> >>> driver or generalize pulseaudio code to tolerate these issues?
> >>>
> >>> If we allow min_volume could be less than zero, and how about the below
> >>> patch in your point of view? Could you have a review of the below patch?
> >>> If that's OK, I can send a standalone patch for it.
> >>>
> >>> From 1f5c8fa0e80d9fe2e3d56133afa8fe9a5dbe6693 Mon Sep 17 00:00:00 2001
> >>> From: Lu Guanqun <guanqun.lu at intel.com>
> >>> Date: Wed, 25 May 2011 14:12:52 +0800
> >>> Subject: [PATCH] fix the assumption that volume is always positive
> >>>
> >>> Add a variable to track whether the actual volume is set or not.
> >>> Suppose this:
> >>>       min volume: -126        max volume: 0
> >>> then when user wants to set some constant volume to -10, it would fail.
> >>>
> >>> Signed-off-by: Lu Guanqun <guanqun.lu at intel.com>
> >>> ---
> >>>  src/modules/alsa/alsa-mixer.c |    6 +++++-
> >>>  1 files changed, 5 insertions(+), 1 deletions(-)
> >>>
> >>> diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
> >>> index 1bd709a..23651b0 100644
> >>> --- a/src/modules/alsa/alsa-mixer.c
> >>> +++ b/src/modules/alsa/alsa-mixer.c
> >>> @@ -1123,6 +1123,7 @@ static int element_set_constant_volume(pa_alsa_element *e, snd_mixer_t *m) {
> >>>      snd_mixer_selem_id_t *sid = NULL;
> >>>      int r = 0;
> >>>      long volume = -1;
> >>> +    int volume_set = 0;
> >>>
> >>>      pa_assert(m);
> >>>      pa_assert(e);
> >>> @@ -1136,6 +1137,7 @@ static int element_set_constant_volume(pa_alsa_element *e, snd_mixer_t *m) {
> >>>      switch (e->volume_use) {
> >>>          case PA_ALSA_VOLUME_OFF:
> >>>              volume = e->min_volume;
> >>> +            volume_set = 1;
> >>>              break;
> >>>
> >>>          case PA_ALSA_VOLUME_ZERO:
> >>> @@ -1143,18 +1145,20 @@ static int element_set_constant_volume(pa_alsa_element *e, snd_mixer_t *m) {
> >>>                  long dB = 0;
> >>>
> >>>                  volume = decibel_fix_get_step(e->db_fix, &dB, +1);
> >>> +                volume_set = 1;
> >>>              }
> >>>              break;
> >>>
> >>>          case PA_ALSA_VOLUME_CONSTANT:
> >>>              volume = e->constant_volume;
> >>> +            volume_set = 1;
> >>>              break;
> >>>
> >>>          default:
> >>>              pa_assert_not_reached();
> >>>      }
> >>>
> >>> -    if (volume >= 0) {
> >>> +    if (volume_set) {
> >>>          if (e->direction == PA_ALSA_DIRECTION_OUTPUT)
> >>>              r = snd_mixer_selem_set_playback_volume_all(me, volume);
> >>>          else
> >>> --
> >>> 1.7.2.3
> >>>
> >>> --
> >>> guanqun
> >>> _______________________________________________
> >>> pulseaudio-discuss mailing list
> >>> pulseaudio-discuss at mail.0pointer.de
> >>> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
> >>
> >> --
> >> guanqun
> >> _______________________________________________
> >> pulseaudio-discuss mailing list
> >> pulseaudio-discuss at mail.0pointer.de
> >> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
> >>
> 
> 
> -- 
> 
> Colin Guthrie
> gmane(at)colin.guthr.ie
> http://colin.guthr.ie/
> 
> Day Job:
>   Tribalogic Limited [http://www.tribalogic.net/]
> Open Source:
>   Mageia Contributor [http://www.mageia.org/]
>   PulseAudio Hacker [http://www.pulseaudio.org/]
>   Trac Hacker [http://trac.edgewall.org/]

-- 
guanqun



More information about the pulseaudio-discuss mailing list