[pulseaudio-discuss] [pulseaudio-commits] 6 commits - src/modules src/pulsecore
Arun Raghavan
arun at accosted.net
Tue Aug 25 07:20:44 PDT 2015
On 21 August 2015 at 17:11, Tanu Kaskinen <tanuk at kemper.freedesktop.org> wrote:
[...]
> + /* XXX: If this is a headphone jack that mutes speakers when plugged in,
> + * and the headphones get unplugged, then the headphone device must be set
> + * to unavailable and the speaker device must be set to unknown. So far so
> + * good. But there's an ugly detail: we must first set the availability of
> + * the speakers and then the headphones. We shouldn't need to care about
> + * the order, but we have to, because module-switch-on-port-available gets
> + * separate events for the two devices, and the intermediate state between
> + * the two events is such that the second event doesn't trigger the desired
> + * port switch, if the event order is "wrong".
> + *
> + * These are the transitions when the event order is "right":
> + *
> + * speakers: 1) unavailable -> 2) unknown -> 3) unknown
> + * headphones: 1) available -> 2) available -> 3) unavailable
> + *
> + * In the 2 -> 3 transition, headphones become unavailable, and
> + * module-switch-on-port-available sees that speakers can be used, so the
> + * port gets changed as it should.
> + *
> + * These are the transitions when the event order is "wrong":
> + *
> + * speakers: 1) unavailable -> 2) unavailable -> 3) unknown
> + * headphones: 1) available -> 2) unavailable -> 3) unavailable
> + *
> + * In the 1 -> 2 transition, headphones become unavailable, and there are
> + * no available ports to use, so no port change happens. In the 2 -> 3
> + * transition, speaker availability becomes unknown, but that's not
> + * a strong enough signal for module-switch-on-port-available, so it still
> + * doesn't do the port switch.
> + *
> + * We should somehow merge the two events so that
> + * module-switch-on-port-available would handle both transitions in one go.
> + * If module-switch-on-port-available used a defer event to delay
> + * the port availability processing, that would probably do the trick. */
> +
> + PA_DYNARRAY_FOREACH(device, jack->ucm_hw_mute_devices, idx)
> + pa_alsa_ucm_device_update_available(device);
> +
I'm really not happy about the idea of module-alsa-card needing to
know about switching order in module-switch-on-port-available (or in
general have knowledge of unrelated modules in any module if
avoidable).
Doesn't it make sense to fix module-switch-on-port-available to work
correctly in the second case?
-- Arun
More information about the pulseaudio-discuss
mailing list