switch-on-port-available: prefer ports that have been selected by the user
authorTanu Kaskinen <tanuk@iki.fi>
Fri, 4 Mar 2016 13:23:32 +0000 (15:23 +0200)
committerArun Raghavan <git@arunraghavan.net>
Tue, 3 May 2016 06:19:35 +0000 (11:49 +0530)
commit23c15c3b52a958887c1f8cad3c94879a8770ef0e
tree179e2118ecb8f2a62cc506a63975b85365d52c79
parentc4058b8d00a51d8c600d950c8ec8967ab9c6f7ea
switch-on-port-available: prefer ports that have been selected by the user

Let's assume that there are two output ports, and they are on
different profiles:

    * Integrated speakers (priority: 10000, available)
    * HDMI                (priority:  5900, not available)

Then the user plugs in an HDMI monitor with speakers. Since the HDMI
priority is lower than the speaker priority, we don't route to HDMI by
default. However, the user manually switches the profile to use the
HDMI output.

Then the user plugs out the monitor, so we switch back to speakers.
When the monitor is plugged back in, the user needs to manually switch
the audio output again. That should be improved: if the user preferred
to the HDMI output over the speakers, we should remember that and
automatically switch to HDMI whenever it becomes available.

The lack of automatic switching is even worse when the monitor goes to
a sleep mode after some period of inactivity. The monitor audio may
become unavailable, and PulseAudio can't distinguish that from the
case where the monitor is physically unplugged. Even worse, the
monitor may become unavailable for a short while when adjusting the
display parameters (for example, media center software may adjust the
display parameters to match the media that is being played back). In
these cases we clearly should switch automatically back to HDMI when
it becomes available again.

This patch fixes the problem by setting pa_card.preferred_input_port
and pa_card.preferred_output_port when the user changes the card
profile or a port, and switching to the preferred port when it becomes
available.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93946
src/modules/module-switch-on-port-available.c