[pulseaudio-discuss] [pulseaudio-commits] 6 commits - src/modules src/pulsecore
Tanu Kaskinen
tanuk at iki.fi
Tue Aug 25 09:00:17 PDT 2015
On Tue, 2015-08-25 at 19:50 +0530, Arun Raghavan wrote:
> 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?
Yes it makes sense. I just haven't got around to doing that yet, even
though the fix might end up being very simple (just move the state
change processing in module-switch-on-port-available to a defer event).
--
Tanu
More information about the pulseaudio-discuss
mailing list