[alsa-devel] Using UCM with PulseAudio
arun.raghavan at collabora.co.uk
Wed Jun 20 14:30:48 CEST 2012
Thanks for clearing things up.
On Fri, 2012-06-15 at 18:08 +0100, Liam Girdwood wrote:
> > The first problem is mutual exclusivity of verbs. From what I can
> > understand, verbs are intended to be mutually exclusive -- if you have a
> > HiFi verb and a VoiceCall verb, only one may be used at a time. We have
> > mapped verbs to card profiles, which offer the same guarantee. However,
> > on Android (which is a fair example of the kind of audio policy we might
> > want), the HiFi verb PCMs maybe used while the VoiceCall PCMs are open.
> > This is done, for example, to play an end-of-call tone from the CPU
> > while the modem PCMs are still held open. Is there some way to do this
> > with UCM?
> A verb is not tied to any specific PCM device here. It's intended to be
> the highest level of audio use case where it can configure any audio
> resource (including multiple cards) to enable the use case action.
> So for OMAP4 we would have the HiFi verb for all use case where we are
> playing or capturing HiFi quality and the voice call verb where we are
> making a telephone voice call.
> UCM provides the "modifier" to allow ad-hoc modifications to the audio
> use case like above where we want to play an end of call tone. In this
> case the verb is still VoiceCall, but PA would enable the "PlayTone"
> modifer to play the tone (UCM can also tell Pulseaudio the sink PCM and
> volume control for the tone data).
Just as an observation, I think the Android HAL just uses PCM 0 and not
the PCM 3, but in the PA case, I'll do it the way you describe since
that makes more sense.
> > The second problem is having separate PCMs for modifiers. In the OMAP4
> > profile, ringtone playback is exposed via a PlayTone modifier which
> > corresponds to a separate PCM from regular HiFi playback. In the UCM-PA
> > mapping we decided on, modifiers were implemented as device intended
> > roles on a sink, so that when a stream with that role came in, we could
> > enable the modifier, and disable it when such a stream ends. However,
> > this doesn't account for switching the PCM on which playback is
> > occurring. Should we be creating a separate sink for such modifiers
> > (with lower priority, so they're not routed to unless there's a stream
> > with the required role coming in)? Or should we be reopening the PCM for
> > this?
> The intention for modifiers that use separate ALSA PCM sinks/sources
> from the verb is to keep the main stream on the verb PCM source/sink and
> the modifier stream will use the modifier PCM sink/source (this can be
> the same PCM for some hardware).
> e.g. MP3 will be played to pcm 0 sink and ringtone to pcm 1 sink. The HW
> will then mix both streams before they are rendered.
Okay, so what this means is that we need to extend the current UCM work
to create a second, lower priority sink for each modifier that has a
distinct PlaybackPCM, and let the role-based routing pick that in cases
where it makes sense. It's good that this doesn't change how we've
mapped existing concepts -- just adds to it.
More information about the Alsa-devel