[pulseaudio-discuss] [PATCH v3 0/6] Add default volume to ports
Alexander E. Patrakov
patrakov at gmail.com
Tue May 5 08:28:09 PDT 2015
05.05.2015 19:08, Tanu Kaskinen wrote:
> On Tue, 2015-05-05 at 17:31 +0500, Alexander E. Patrakov wrote:
>> 27.04.2015 16:34, Tanu Kaskinen wrote:
>>> Here's the third version of the patch set that aims to fix the Aureon
>>> volume bug[1].
>>>
>>> Changes in v3:
>>> - Use pa_parse_volume() in pa_config_parse_volume().
>>> - Add mute and save_mute fields to
>>> pa_sink/source_port_changed_hook_data to make the mute handling
>>> symmetric with the volume handling.
>>>
>>> David suggested that I could share the volume parsing code also in
>>> pactl, but that turned out to be difficult with pactl's relative
>>> volume adjustments, so I didn't want to do that in this patch set, but
>>> I plan to do that later.
>>>
>>> [1] https://bugs.freedesktop.org/show_bug.cgi?id=81777
>>
>> I have tested the series. It works as described. However, the heuristic
>> that decides between 100% and 30% volume default could use some more
>> thinking.
>>
>> On my new Rotel RA-1570 integrated amplifier, it defaulted to 30%
>> volume. Also, because the ALSA mixer does not expose any volume controls
>> on this card, PulseAudio applied those 30% in software. As this is a
>> high-end amplifier (as opposed to the originally-discussed Terratec
>> Aureon Dual USB card) and it has a hardware volume knob, I would object
>> to this default on my card.
>>
>> So, maybe it is a good idea to apply the 30% default volume not on all
>> analog ports, but only on paths that have a volume control exposed in
>> ALSA mixer, plus some explicit exceptions (including the Terratec card)?
>
> That sounds ok to me (I'm not volunteering to write the patch, however).
> I'm not sure what would be the best approach to configuring it... Should
> the analog path configuration files explicitly say that "I'm an analog
> path", and the mixer code would then apply this heuristics to those
> paths? Or should the mixer code just look at the path name, and infer
> that it's an analog path if the name starts with "analog-"?
I think that, out of these two possibilities, an explicit "I'm an analog
path" statement is better. Or maybe use a negative - "I am a digital
path", that's less lines to write, and also safer if new analog paths
appear.
So my logic becomes:
0. If the path explicitly sets the default volume, use it. This should
only be set in exceptional cases like the Terratec card.
1. If the path is digital, set the default volume to 100%.
2. If the path is not digital, but there are no applicable ALSA volume
controls at all (i.e. if PA would fall back to software-only volume
control), set the default volume to 100%. Rationale: corner case, a hint
that the volume control is in fact external.
3. If the path is not digital, and there are applicable ALSA volume
controls, then set the default volume to 30%.
But, because you already have patches, please ignore that. I think my
logic can almost be expressed using your "default-volume" option, we
just need two such options: one applicable if there are ALSA mixer
controls on the path, and the other applicable if there aren't such
controls. This improvement can be done later, i.e. I don't object to the
current patchset.
>
>> Alsa-info here:
>> http://www.alsa-project.org/db/?f=45946d2958764b508773255a8ffffb1bf4e41ceb
>>
>> P.S. PulseAudio also finds a bogus SPDIF output on the Rotel amplifier.
>> Maybe we need a whitelist, not a blacklist, here?
>
> Can you elaborate, what kind of whitelist? Only create spdif profiles on
> whitelisted products? If that's what you mean, I don't think it's a good
> idea. It's a worse situation if we erroneously disable the spdif
> capability on a sound card than if we erroneously enable it.
Yes, you understood me correctly. As for the fear that we erroneously
disable the spdif capability, I think that it is a bit more subtle. On
the majority of USB cards (i.e. on all cards that don't have a specific
explicitly-written exception in the ALSA configs), both front:1 and
iec958:1 resolve to hw:1, and absolutely nothing is done in ALSA to say
to the actual hardware whether we want analog or digital output. So
there is almost nothing to be lost.
The only situations where this matters are related to default volumes
and passthrough capability - but also note that some USB cards decode
AC3 in hardware and then output that to headphones. So USB audio is
really a gray (or unknown) area between analog and digital, and IMHO
should ideally be special-cased.
--
Alexander E. Patrakov
More information about the pulseaudio-discuss
mailing list