[pulseaudio-discuss] RFC: Switch to HDMI or not?

Alexander E. Patrakov patrakov at gmail.com
Wed Feb 3 23:47:53 PST 2016


04.02.2016 10:45, David Henningsson пишет:
> So, there has been a few bugs related to the new routing, in particular
> [1] which while related to whether or not the actual system has an
> internal speaker or not, also highlights the use case of letting an HDMI
> monitor go to powersave. This will, starting from 8.0, cause sound to be
> rerouted to internal speakers, even after the HDMI monitor comes back
> online.
>
> Here's a recap.
>
>   1) The old situation of playing back audio to an unconnected monitor
> (or powersaved monitor) was not user friendly.

Partially agree. As always with old bugs, there may be people for whom 
they are features.

>   2) There is no way (AFAIK) we can distinguish between a monitor being
> in powersave mode, or permanently unconnected.

No opinion here, ask the graphics guys.

>   3) Hence, the proper solution is to switch to analog when the monitor
> is off/powersaved/unconnected and then switch back when it comes back
> online.

Well, here I also don't 100% agree. You are focusing on the "what 
happens when the monitor comes back from powersaving mode" side of 
things - which is too late and too passive. My opinion, as a user, is:

1. If audio is playing on HDMI (even if this is a music file), it is a 
mistake to apply DPMS. Black out the screen if needed for screensaver - 
maybe, DPMS - no. Personally, I have disabled DPMS on my desktop PC, but 
this is also due to a different bug, unrelated to audio.

2. An attempt to play audio to a DPMSed monitor should try to wake it 
up. I understand that we lack an infrastructure to do this. But, 
ultimately, only if that fails or times out, audio should be moved to 
analog (if moved at all).

I understand that this is better discussed on something like dri-devel, 
but I have no concrete-enough proposal to actually present there.

>   4) The easiest way to do that is, at least after the priority patch
> [2] has been applied, to adjust the port priorities so that HDMI ports
> have a higher priority than analog-speakers. This is also consistent
> with a suggestion from GNOME [3]. However, doing so might instead upset
> people who would like to stay on analog-speakers when their HDMI monitor
> comes back online.

Let's see whether such people exist.

But I have another class of upset people: those whose monitor supports 
HDMI audio and has only headphones output, which is unused (but we can't 
know that it is unused, i.e. that the monitor is in fact a glorified 
null sink). Which is exactly what the proposal at the end of your email 
addresses (better accounting of HDMI port availability).

And also the case of two audio-capable monitors. When the graphical 
session power-saves them "at the same time", there is a race. Suppose 
that the user wants his audio on HDMI2, but there is also HDMI1. So, if 
HDMI1 is slower to respond to DPMS, the audio could be rerouted this 
way: HDMI2 -> HDMI1 (temporarily) -> analog. When the monitors come back 
up: analog -> HDMI2, but then HDMI1 (with a higher priority) comes up. 
This is also addressed by your proposal.

>   5) We could then tell those people that they should manually increase
> the priority or analog-speakers in our configuration files, but it could
> be argued that this is not user friendly enough either.

It is indeed not user friendly. But we don't have a 100% user-friendly 
solution, because mind-reading technology is not quite there yet. So 
some user interaction is definitely needed.

>   6) Tanu suggested in [1] to add functionality to remember the latest
> user-selected port and/or profile to module-switch-on-port-available.
> I'm hesitant to that solution, because

...

>   6a) It breaks the main idea of module-switch-on-port-available being
> strictly rule/priority-based, leaving the "remember" feature to the not
> yet finished module-port-manager.

My opinion (a trivial one, I'd admit) is that any rule/priority-based 
zero-configuration logic is busted in at least one case. We definitely 
need to take user interaction into account somewhere if we don't want to 
require explicit configuration.

>   6b) It seems non-trivial, and I have a gut feeling it will break some
> other use case, that neither of us is thinking about right now.

Based on our past experience here, I agree.

>   6c) I realize neither of 6a) or 6b) are particularly strong arguments
> against actually fixing a problem...

I think here you meant "trying to fix".

I also think the real problem here is to convince others that you have 
indeed fixed the original problem :) so for me 6b is strong enough.

>   7) So, this morning I came up with another idea. And this is the RFC
> part of this email. We're not sure whether or not a just
> connected/online monitor has "usable" HDMI audio or not. Hence, maybe
> plugging in a monitor should lead to the HDMI port availability being
> "unknown" rather than "yes"? module-switch-on-port-available will not
> route to something that changes availability from "no" to "unknown".

Makes sense, given the additional module mentioned below. Is there any 
other (non-HDMI) example of a port availability going from "no" to 
"unknown"?

> For this to make sense, we need to add yet another module, which
> determines whether an HDMI port should be "unknown" or "yes" when coming
> back online. If a user manually switches to the HDMI profile then that
> means "yes" from now on, if a user manually switches away then that
> means "unknown" from now on. As a bonus, we could potentially use ELD
> info as a key to a database of "yes" and "unknown" values (this could be
> useful for module-port-manager as well). I'm not sure whether the key
> should be "sink+port", "ELD" or "sink+port+ELD", but probably
> "sink+port+ELD" is the best one considering people with dual monitors.
> What do you think?

I am a bit concerned with assigning numbers dynamically for 
HDMI/DisplayPort audio pcms. So, given the semi-dynamic proposal that 
you made a year ago, I'd say the key should be "sink+port+ELD if dynamic 
numbering is not in use, sink+ELD if it is in use".

>
>   8) Everything said about HDMI applies to DisplayPort as well.

Definitely.

-- 
Alexander E. Patrakov


More information about the pulseaudio-discuss mailing list