[pulseaudio-discuss] [PATCH 5/7] alsa: set availability for (some) unavailable profiles
Tanu Kaskinen
tanuk at iki.fi
Mon Oct 26 22:51:28 PDT 2015
On Mon, 2015-10-26 at 15:08 +0100, David Henningsson wrote:
>
> On 2015-10-23 12:56, Tanu Kaskinen wrote:
> > The alsa card hasn't so far set any availability for profiles. That
> > caused an issue with some HDMI hardware: the sound card has two HDMI
> > outputs, but only the second of them is actually usable. The
> > unavailable port is marked as unavailable and the available port is
> > marked as available, but this information isn't propagated to the
> > profile availability. Without profile availability information, the
> > initial profile policy picks the unavailable one, since it has a
> > higher priority value.
> >
> > This patch adds simple logic for marking some profiles unavailable:
> > if the profile only contains unavailable ports, the profile is
> > unavailable too. This can be improved in the future so that if a
> > profile contains sinks or sources that only contain unavailable ports,
> > the profile should be marked as unavailable. Implementing that
> > requires adding more information about the sinks and sources to
> > pa_card_profile, however.
>
> In general ack for the idea; exposing profile availability information
> is certainly not bad, and might become useful for more things in future.
>
> >
> > BugLink: https://bugzilla.yoctoproject.org/show_bug.cgi?id=8448
> > ---
> > src/modules/alsa/module-alsa-card.c | 24 ++++++++++++++++++++++++
> > 1 file changed, 24 insertions(+)
> >
> > diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
> > index ad463ec..fd6b6aa 100644
> > --- a/src/modules/alsa/module-alsa-card.c
> > +++ b/src/modules/alsa/module-alsa-card.c
> > @@ -364,6 +364,7 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) {
> > void *state;
> > pa_alsa_jack *jack;
> > struct temp_port_avail *tp, *tports;
> > + pa_card_profile *profile;
> >
> > pa_assert(u);
> >
> > @@ -409,6 +410,29 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) {
> > if (tp->avail == PA_AVAILABLE_NO)
> > pa_device_port_set_available(tp->port, tp->avail);
> >
> > + /* Update profile availabilities. The logic could be improved; for now we
> > + * only set obviously unavailable profiles (those that contain only
> > + * unavailable ports) to PA_AVAILABLE_NO and all others to
> > + * PA_AVAILABLE_UNKNOWN. */
>
> I do have a comment about the implementation though. Shouldn't we follow
> the same "workaround" for profile availability as we do for profiles, i
> e, go to available first and unavailable later?
Well, the workaround for ports is a solution to an existing problem,
but the workaround for profiles would be a solution to a speculative
and unspecified future problem. So I wouldn't say that we "should"
apply the workaround to profiles too. But I also don't mind doing that.
--
Tanu
More information about the pulseaudio-discuss
mailing list