* Using UCM with PulseAudio
@ 2012-06-15 2:53 Arun Raghavan
2012-06-15 12:11 ` [pulseaudio-discuss] " Tanu Kaskinen
` (2 more replies)
0 siblings, 3 replies; 17+ messages in thread
From: Arun Raghavan @ 2012-06-15 2:53 UTC (permalink / raw)
To: alsa-devel, pulseaudio-discuss; +Cc: broonie, lrg, Feng Wei
Hello,
I've been working on porting PulseAudio to Android on the OMAP4-based
Galaxy Nexus, and have recently looking at the policy-bits. The basic
porting has been greatly simplified with Wei Feng's work to renew
PulseAudio UCM integration and Liam's help with fixing up some of the
UCM config for the Galaxy Nexus. I am, however, facing some trouble
mapping how the hardware is used to how UCM presents it (or, perhaps,
the UCM-PA mapping does).
Some simplified background: the devices of interest on the OMAP4 SoC are
the main hifi PCM which can be routed to various outputs, the modem PCM
which is not used for actual output but to enable use of the modem
during calls, and the tones PCM which is intended to be used for playing
ringtones, aiui.
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?
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?
Finally, a question also related to modifiers -- is it expected that
there will never be a case where a stream that requires no modifier is
being played while a stream that does require a modifier also exists? If
not, what kind of policy should we have for enabling the modifier or
not?
Cheers,
Arun
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-06-15 2:53 Using UCM with PulseAudio Arun Raghavan @ 2012-06-15 12:11 ` Tanu Kaskinen 2012-06-15 17:28 ` Liam Girdwood 2012-07-23 3:38 ` Arun Raghavan 2012-06-15 12:28 ` Mark Brown 2012-06-15 17:08 ` Liam Girdwood 2 siblings, 2 replies; 17+ messages in thread From: Tanu Kaskinen @ 2012-06-15 12:11 UTC (permalink / raw) To: Arun Raghavan; +Cc: alsa-devel, broonie, pulseaudio-discuss, jankovac503, lrg On Fri, 2012-06-15 at 08:23 +0530, Arun Raghavan wrote: > Hello, > I've been working on porting PulseAudio to Android on the OMAP4-based > Galaxy Nexus, and have recently looking at the policy-bits. The basic > porting has been greatly simplified with Wei Feng's work to renew > PulseAudio UCM integration and Liam's help with fixing up some of the > UCM config for the Galaxy Nexus. I am, however, facing some trouble > mapping how the hardware is used to how UCM presents it (or, perhaps, > the UCM-PA mapping does). > > Some simplified background: the devices of interest on the OMAP4 SoC are > the main hifi PCM which can be routed to various outputs, the modem PCM > which is not used for actual output but to enable use of the modem > during calls, and the tones PCM which is intended to be used for playing > ringtones, aiui. Sorry for hijacking the thread. The following wall of text won't help Arun with his immediate problems, but I wanted to share my thoughts about the planned routing system in pulseaudio and how OMAP4-style hardware affects it. I asked in IRC for a clarification about what "is not used for actual output but to enable use of the modem during calls" means. Arun means that opening the modem playback PCM opens a direct audio path from the modem to the earpiece. Pulseaudio doesn't see the audio data at all. There's a corresponding capture PCM that opens a direct audio path to the other direction. This sort of hardware causes trouble for the planned routing system, at least as I have envisioned it to behave. My vision has been that the routing logic in pulseaudio would enable and disable ports based on the streams that exist and their properties. In the OMAP4 case, there aren't any streams created when a cellular call starts, and therefore the routing logic doesn't know that it should do something. Arun has made an "Android policy module", which I suppose activates the VoiceCall profile when a call starts and prevents the associated sink and source from suspending even though they appear to be idle. In the brave new generic routing policy world, the ports/profiles should not be touched by anything else than the generic routing logic. Therefore, Arun's solution will have to be eventually replaced somehow. As I described, my vision for the routing logic falls short with OMAP4, if there are no streams associated with the cellular audio. So, what's the solution? One solution would be to create virtual streams for the in-hardware audio paths. Another would be to introduce entirely new concepts in pulseaudio for the in-hardware audio paths. Regarding the virtual streams solution, it's still unclear what would trigger the virtual streams to be created. I think they should be created by module-alsa-card when the relevant ports are activated, but what activates the ports, if the routing system only does anything when streams are created? The cellular adaptation module should tell the routing system that "a call is starting, it would be nice to open the call audio path now". I was hoping that the virtual stream solution would avoid adding any further complexity to the routing system, but it seems that the routing system must anyway be aware of the special in-hardware audio paths so that other modules can request them to be activated. So, maybe it's not worth the effort to create virtual streams, since they don't actually help with the routing. After spending a while thinking about this, my proposal is that the routing logic should play with more abstract inputs and outputs than streams and ports. All streams and ports, and the cellular modem that is not directly accessible by Pulseaudio, would be just inputs and outputs from the routing system point of view. For example, when a music player creates a new playback stream, the server-side stream implementation would create a new input and register it in the routing system. After that, the stream implementation would submit a "routing request" to the routing system: "connect input id:4 to somewhere". The application didn't specify where the stream should be routed, so based on the routing request properties (like media role), the routing system would select the best output that is available. Routing requests would exist as long as they are needed. In case of normal streams, that would be as long as the stream exists. If it becomes impossible to fulfill the request at some point, the stream gets removed. Routing requests would have a priority - in the music player's case, the priority would probably be derived from the stream media role. Phone stream routing requests would have a higher priority. Another example: there's a cellular call on an OMAP4 platform. The cellular adaptation module notices that, and creates two routing requests: "connect input type:cellular_modem to somewhere" and "connect output type:cellular_modem to somewhere". The alsa card would have created, based on the UCM data, an input and an output with label "type:cellular_modem". Those would have very limited routing options: for example, the cellular modem input might be routable only to the earpiece or the main speaker. module-alsa-card would inform the routing system about the limitations, and the routing system would pick the best alternative from the two available choices. On some other platform where the cellular modem audio interface is directly accessible, "type:cellular_modem" would point to an input or output that is implemented by a normal port. I don't know if UCM provides the information about whether the VoiceCall PCMs implement a real audio interface or are they just a hack to enable the in-hardware audio path. If that information is not available, I'd say that it's then something that needs to be fixed. After the routing system has decided what input will be routed to what output, it will have to somehow make the connection happen. The problem is that only the alsa module knows how to connect the cellular modem to the earpiece. Maybe the input and output structs could have a type that said whether the input or output is a stream, a port, or something custom. If it's something custom, the struct would have a function pointer for doing the connection, otherwise normal stream connection code can be used. -- Tanu ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-06-15 12:11 ` [pulseaudio-discuss] " Tanu Kaskinen @ 2012-06-15 17:28 ` Liam Girdwood 2012-06-15 17:34 ` Mark Brown 2012-07-23 3:38 ` Arun Raghavan 1 sibling, 1 reply; 17+ messages in thread From: Liam Girdwood @ 2012-06-15 17:28 UTC (permalink / raw) To: Tanu Kaskinen Cc: Arun Raghavan, broonie, alsa-devel, jankovac503, pulseaudio-discuss On Fri, 2012-06-15 at 15:11 +0300, Tanu Kaskinen wrote: > On Fri, 2012-06-15 at 08:23 +0530, Arun Raghavan wrote: > > Hello, > > I've been working on porting PulseAudio to Android on the OMAP4-based > > Galaxy Nexus, and have recently looking at the policy-bits. The basic > > porting has been greatly simplified with Wei Feng's work to renew > > PulseAudio UCM integration and Liam's help with fixing up some of the > > UCM config for the Galaxy Nexus. I am, however, facing some trouble > > mapping how the hardware is used to how UCM presents it (or, perhaps, > > the UCM-PA mapping does). > > > > Some simplified background: the devices of interest on the OMAP4 SoC are > > the main hifi PCM which can be routed to various outputs, the modem PCM > > which is not used for actual output but to enable use of the modem > > during calls, and the tones PCM which is intended to be used for playing > > ringtones, aiui. > > Sorry for hijacking the thread. The following wall of text won't help > Arun with his immediate problems, but I wanted to share my thoughts > about the planned routing system in pulseaudio and how OMAP4-style > hardware affects it. > No worries :) > I asked in IRC for a clarification about what "is not used for actual > output but to enable use of the modem during calls" means. Arun means > that opening the modem playback PCM opens a direct audio path from the > modem to the earpiece. Pulseaudio doesn't see the audio data at all. > There's a corresponding capture PCM that opens a direct audio path to > the other direction. The OMAP4 audio PCM is used to configure and initiate the transfer of PCM data to and from the MODEM. The audio PCM is basically routed from the CODEC via the ABE to the MODEM and vice versa. The host CPU does not move any PCM data around in this use case (except when another PCM is opened to record the call etc.). > This sort of hardware causes trouble for the planned routing system, at > least as I have envisioned it to behave. My vision has been that the > routing logic in pulseaudio would enable and disable ports based on the > streams that exist and their properties. In the OMAP4 case, there aren't > any streams created when a cellular call starts, and therefore the > routing logic doesn't know that it should do something. > This is quite common in the smartphone voice call use case. A lot of phones will not route voice PCM data across the CPU in order to save power. The host CPU will typically setup the call (i.e. mixers, rate, etc) and then start the call. In this case PA would configure and initiate the call and then sleep. However PA would still be "active" wrt the voice call as it would be required to perform any voice call actions like capture the call or play music during the call. > > Regarding the virtual streams solution, it's still unclear what would > trigger the virtual streams to be created. I think they should be > created by module-alsa-card when the relevant ports are activated, but > what activates the ports, if the routing system only does anything when > streams are created? The cellular adaptation module should tell the > routing system that "a call is starting, it would be nice to open the > call audio path now". I was hoping that the virtual stream solution > would avoid adding any further complexity to the routing system, but it > seems that the routing system must anyway be aware of the special > in-hardware audio paths so that other modules can request them to be > activated. > UCM can help here a little since it can be used to give information about the underlying hardware to PA. i.e. if there is a sink for the voicecall, and if the sink is virtual, etc. > > On some other platform where the cellular modem audio interface is > directly accessible, "type:cellular_modem" would point to an input or > output that is implemented by a normal port. I don't know if UCM > provides the information about whether the VoiceCall PCMs implement a > real audio interface or are they just a hack to enable the in-hardware > audio path. If that information is not available, I'd say that it's then > something that needs to be fixed. > As mentioned above we can add this to UCM to help with this sort of logic. Regards Liam ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-06-15 17:28 ` Liam Girdwood @ 2012-06-15 17:34 ` Mark Brown 2012-06-15 17:38 ` Tanu Kaskinen 0 siblings, 1 reply; 17+ messages in thread From: Mark Brown @ 2012-06-15 17:34 UTC (permalink / raw) To: Liam Girdwood Cc: Tanu Kaskinen, Arun Raghavan, jankovac503, alsa-devel, pulseaudio-discuss [-- Attachment #1.1: Type: text/plain, Size: 821 bytes --] On Fri, Jun 15, 2012 at 06:28:51PM +0100, Liam Girdwood wrote: > On Fri, 2012-06-15 at 15:11 +0300, Tanu Kaskinen wrote: > > This sort of hardware causes trouble for the planned routing system, at > > least as I have envisioned it to behave. My vision has been that the > > routing logic in pulseaudio would enable and disable ports based on the > > streams that exist and their properties. In the OMAP4 case, there aren't > > any streams created when a cellular call starts, and therefore the > > routing logic doesn't know that it should do something. > This is quite common in the smartphone voice call use case. A lot of It's more than common, I'm only aware of one phone design which does route the audio via the CPU on call (the N900). Anything that can't cope with bypassed on call audio is going to struggle. [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-06-15 17:34 ` Mark Brown @ 2012-06-15 17:38 ` Tanu Kaskinen 0 siblings, 0 replies; 17+ messages in thread From: Tanu Kaskinen @ 2012-06-15 17:38 UTC (permalink / raw) To: Mark Brown Cc: Arun Raghavan, jankovac503, Liam Girdwood, alsa-devel, pulseaudio-discuss On Fri, 2012-06-15 at 18:34 +0100, Mark Brown wrote: > On Fri, Jun 15, 2012 at 06:28:51PM +0100, Liam Girdwood wrote: > > On Fri, 2012-06-15 at 15:11 +0300, Tanu Kaskinen wrote: > > > > This sort of hardware causes trouble for the planned routing system, at > > > least as I have envisioned it to behave. My vision has been that the > > > routing logic in pulseaudio would enable and disable ports based on the > > > streams that exist and their properties. In the OMAP4 case, there aren't > > > any streams created when a cellular call starts, and therefore the > > > routing logic doesn't know that it should do something. > > > This is quite common in the smartphone voice call use case. A lot of > > It's more than common, I'm only aware of one phone design which does > route the audio via the CPU on call (the N900). Anything that can't > cope with bypassed on call audio is going to struggle. N9 also routes the audio via the CPU. Now you know two phone designs :) -- Tanu ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-06-15 12:11 ` [pulseaudio-discuss] " Tanu Kaskinen 2012-06-15 17:28 ` Liam Girdwood @ 2012-07-23 3:38 ` Arun Raghavan 2012-07-23 6:33 ` Tanu Kaskinen 2012-07-23 7:57 ` Mark Brown 1 sibling, 2 replies; 17+ messages in thread From: Arun Raghavan @ 2012-07-23 3:38 UTC (permalink / raw) To: Tanu Kaskinen; +Cc: lrg, alsa-devel, broonie, pulseaudio-discuss, jankovac503 [not sure if this is still interesting to alsa-devel, but keeping the CC anyway] On Fri, 2012-06-15 at 15:11 +0300, Tanu Kaskinen wrote: > On Fri, 2012-06-15 at 08:23 +0530, Arun Raghavan wrote: > > Hello, > > I've been working on porting PulseAudio to Android on the OMAP4-based > > Galaxy Nexus, and have recently looking at the policy-bits. The basic > > porting has been greatly simplified with Wei Feng's work to renew > > PulseAudio UCM integration and Liam's help with fixing up some of the > > UCM config for the Galaxy Nexus. I am, however, facing some trouble > > mapping how the hardware is used to how UCM presents it (or, perhaps, > > the UCM-PA mapping does). > > > > Some simplified background: the devices of interest on the OMAP4 SoC are > > the main hifi PCM which can be routed to various outputs, the modem PCM > > which is not used for actual output but to enable use of the modem > > during calls, and the tones PCM which is intended to be used for playing > > ringtones, aiui. > > Sorry for hijacking the thread. The following wall of text won't help > Arun with his immediate problems, but I wanted to share my thoughts > about the planned routing system in pulseaudio and how OMAP4-style > hardware affects it. > > I asked in IRC for a clarification about what "is not used for actual > output but to enable use of the modem during calls" means. Arun means > that opening the modem playback PCM opens a direct audio path from the > modem to the earpiece. Pulseaudio doesn't see the audio data at all. > There's a corresponding capture PCM that opens a direct audio path to > the other direction. > > This sort of hardware causes trouble for the planned routing system, at > least as I have envisioned it to behave. My vision has been that the > routing logic in pulseaudio would enable and disable ports based on the > streams that exist and their properties. In the OMAP4 case, there aren't > any streams created when a cellular call starts, and therefore the > routing logic doesn't know that it should do something. > > Arun has made an "Android policy module", which I suppose activates the > VoiceCall profile when a call starts and prevents the associated sink > and source from suspending even though they appear to be idle. In the > brave new generic routing policy world, the ports/profiles should not be > touched by anything else than the generic routing logic. Therefore, > Arun's solution will have to be eventually replaced somehow. > > As I described, my vision for the routing logic falls short with OMAP4, > if there are no streams associated with the cellular audio. So, what's > the solution? One solution would be to create virtual streams for the > in-hardware audio paths. Another would be to introduce entirely new > concepts in pulseaudio for the in-hardware audio paths. > > Regarding the virtual streams solution, it's still unclear what would > trigger the virtual streams to be created. I think they should be > created by module-alsa-card when the relevant ports are activated, but > what activates the ports, if the routing system only does anything when > streams are created? The cellular adaptation module should tell the > routing system that "a call is starting, it would be nice to open the > call audio path now". I was hoping that the virtual stream solution > would avoid adding any further complexity to the routing system, but it > seems that the routing system must anyway be aware of the special > in-hardware audio paths so that other modules can request them to be > activated. > > So, maybe it's not worth the effort to create virtual streams, since > they don't actually help with the routing. > > After spending a while thinking about this, my proposal is that the > routing logic should play with more abstract inputs and outputs than > streams and ports. All streams and ports, and the cellular modem that is > not directly accessible by Pulseaudio, would be just inputs and outputs > from the routing system point of view. > > For example, when a music player creates a new playback stream, the > server-side stream implementation would create a new input and register > it in the routing system. After that, the stream implementation would > submit a "routing request" to the routing system: "connect input id:4 to > somewhere". The application didn't specify where the stream should be > routed, so based on the routing request properties (like media role), > the routing system would select the best output that is available. > > Routing requests would exist as long as they are needed. In case of > normal streams, that would be as long as the stream exists. If it > becomes impossible to fulfill the request at some point, the stream gets > removed. > > Routing requests would have a priority - in the music player's case, the > priority would probably be derived from the stream media role. Phone > stream routing requests would have a higher priority. > > Another example: there's a cellular call on an OMAP4 platform. The > cellular adaptation module notices that, and creates two routing > requests: "connect input type:cellular_modem to somewhere" and "connect > output type:cellular_modem to somewhere". The alsa card would have > created, based on the UCM data, an input and an output with label > "type:cellular_modem". Those would have very limited routing options: > for example, the cellular modem input might be routable only to the > earpiece or the main speaker. module-alsa-card would inform the routing > system about the limitations, and the routing system would pick the best > alternative from the two available choices. > > On some other platform where the cellular modem audio interface is > directly accessible, "type:cellular_modem" would point to an input or > output that is implemented by a normal port. I don't know if UCM > provides the information about whether the VoiceCall PCMs implement a > real audio interface or are they just a hack to enable the in-hardware > audio path. If that information is not available, I'd say that it's then > something that needs to be fixed. This likely means we need to add a mechanism to UCM to signal that a PCM is a virtual/fake PCM. This would be needed for whatever solution I devise to solve the problem immediately as well. > After the routing system has decided what input will be routed to what > output, it will have to somehow make the connection happen. The problem > is that only the alsa module knows how to connect the cellular modem to > the earpiece. Maybe the input and output structs could have a type that > said whether the input or output is a stream, a port, or something > custom. If it's something custom, the struct would have a function > pointer for doing the connection, otherwise normal stream connection > code can be used. The system you describe sounds generic enough to catch most things we'd want to do, but I think it makes sense to enumerate the kinds of uses that we are not able to elegantly handle right now. Here's what I have: 1. Virtual devices that represent paths that are not in the CPU domain (like the phone PCMs above) 2. Devices that require a loopback to be useful, like an FM radio or A2DP source 3. Devices that have a loopback path in hardware/DSP (this is a request I've seen, but I'm not aware of hardware that does this) I'm sure there's more stuff, so please do add to this list. While (1) is probably easy to take care of cleanly with whatever we have currently, having some routing awareness in the PA ALSA modules, and an ability to express this to the routing logic seems to be necessary to deal with (2) and (3). -- Arun ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-07-23 3:38 ` Arun Raghavan @ 2012-07-23 6:33 ` Tanu Kaskinen 2012-07-23 10:06 ` Mark Brown 2012-07-23 7:57 ` Mark Brown 1 sibling, 1 reply; 17+ messages in thread From: Tanu Kaskinen @ 2012-07-23 6:33 UTC (permalink / raw) To: Arun Raghavan; +Cc: lrg, alsa-devel, broonie, pulseaudio-discuss, jankovac503 On Mon, 2012-07-23 at 09:08 +0530, Arun Raghavan wrote: > 3. Devices that have a loopback path in hardware/DSP (this is a request > I've seen, but I'm not aware of hardware that does this) Isn't this very common with desktop hardware? For example, my laptop's sound card has a playback volume and mute control for the "Mic" element, which supposedly could be used for looping the mic audio to the speakers or headphones inside the hardware. The N9 hardware also has several possibilities for loopbacks. We used one for the sidetone in calls (sidetone means playing back your own voice back to you, and it's a mandatory feature in mobile phones, AFAIK). -- Tanu ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-07-23 6:33 ` Tanu Kaskinen @ 2012-07-23 10:06 ` Mark Brown 0 siblings, 0 replies; 17+ messages in thread From: Mark Brown @ 2012-07-23 10:06 UTC (permalink / raw) To: Tanu Kaskinen Cc: lrg, Arun Raghavan, jankovac503, alsa-devel, pulseaudio-discuss [-- Attachment #1.1: Type: text/plain, Size: 380 bytes --] On Mon, Jul 23, 2012 at 09:33:27AM +0300, Tanu Kaskinen wrote: > The N9 hardware also has several possibilities for loopbacks. We used > one for the sidetone in calls (sidetone means playing back your own > voice back to you, and it's a mandatory feature in mobile phones, > AFAIK). It's not mandatory but it's certainly pretty standard. Some manufacturers don't do it though. [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [pulseaudio-discuss] Using UCM with PulseAudio 2012-07-23 3:38 ` Arun Raghavan 2012-07-23 6:33 ` Tanu Kaskinen @ 2012-07-23 7:57 ` Mark Brown 1 sibling, 0 replies; 17+ messages in thread From: Mark Brown @ 2012-07-23 7:57 UTC (permalink / raw) To: Arun Raghavan Cc: Tanu Kaskinen, alsa-devel, jankovac503, pulseaudio-discuss, lrg [-- Attachment #1.1: Type: text/plain, Size: 871 bytes --] On Mon, Jul 23, 2012 at 09:08:40AM +0530, Arun Raghavan wrote: Guys, please delete unneeded context from messages - makes it much easier to find the new content. > 3. Devices that have a loopback path in hardware/DSP (this is a request > I've seen, but I'm not aware of hardware that does this) Essentially all basebands in cellphones are connected like this; usually on a phone call the processor running Linux can go into suspend. There are cases where the loopback happens in the main SoC but from the point of view of thinking about it the physical location doesn't usually make a big difference. Most mobile CODECs also have the ability to route their inputs to their outputs without involving the processor for use in sidetone paths and similar. PCs always used to have the ability to do this too, though I guess it's possible that got dropped at some point. [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-15 2:53 Using UCM with PulseAudio Arun Raghavan 2012-06-15 12:11 ` [pulseaudio-discuss] " Tanu Kaskinen @ 2012-06-15 12:28 ` Mark Brown 2012-06-15 17:08 ` Liam Girdwood 2 siblings, 0 replies; 17+ messages in thread From: Mark Brown @ 2012-06-15 12:28 UTC (permalink / raw) To: Arun Raghavan; +Cc: alsa-devel, lrg, pulseaudio-discuss, Feng Wei [-- Attachment #1.1: Type: text/plain, Size: 450 bytes --] On Fri, Jun 15, 2012 at 08:23:33AM +0530, Arun Raghavan wrote: > Finally, a question also related to modifiers -- is it expected that > there will never be a case where a stream that requires no modifier is > being played while a stream that does require a modifier also exists? If > not, what kind of policy should we have for enabling the modifier or > not? Yes, music playback plus ringtone where at least ringtone would probably be a modifier. [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-15 2:53 Using UCM with PulseAudio Arun Raghavan 2012-06-15 12:11 ` [pulseaudio-discuss] " Tanu Kaskinen 2012-06-15 12:28 ` Mark Brown @ 2012-06-15 17:08 ` Liam Girdwood 2012-06-20 12:30 ` Arun Raghavan 2 siblings, 1 reply; 17+ messages in thread From: Liam Girdwood @ 2012-06-15 17:08 UTC (permalink / raw) To: Arun Raghavan; +Cc: alsa-devel, broonie, pulseaudio-discuss, Feng Wei On Fri, 2012-06-15 at 08:23 +0530, Arun Raghavan wrote: > Hello, > I've been working on porting PulseAudio to Android on the OMAP4-based > Galaxy Nexus, and have recently looking at the policy-bits. The basic > porting has been greatly simplified with Wei Feng's work to renew > PulseAudio UCM integration and Liam's help with fixing up some of the > UCM config for the Galaxy Nexus. I am, however, facing some trouble > mapping how the hardware is used to how UCM presents it (or, perhaps, > the UCM-PA mapping does). > > Some simplified background: the devices of interest on the OMAP4 SoC are > the main hifi PCM which can be routed to various outputs, the modem PCM > which is not used for actual output but to enable use of the modem > during calls, and the tones PCM which is intended to be used for playing > ringtones, aiui. You understanding is correct :) > > 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). > 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. > > Finally, a question also related to modifiers -- is it expected that > there will never be a case where a stream that requires no modifier is > being played while a stream that does require a modifier also exists? If > not, what kind of policy should we have for enabling the modifier or > not? Some verbs will not specify modifiers. In this case we should mix any tones etc within the Pulseaudio stream and render on the main sink/source. It's intended that we will try and enable a modifier for a verb (if the modifier exists) when a new PA client stream is opened and it's type can be matched to a modifier. Otherwise I would just mix the streams in PA and render to the current sink. Regards Liam > > Cheers, > Arun > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-15 17:08 ` Liam Girdwood @ 2012-06-20 12:30 ` Arun Raghavan 2012-06-21 2:50 ` Gabriel M. Beddingfield 2012-06-21 8:30 ` [alsa-devel] " Feng Wei 0 siblings, 2 replies; 17+ messages in thread From: Arun Raghavan @ 2012-06-20 12:30 UTC (permalink / raw) To: Liam Girdwood; +Cc: alsa-devel, broonie, pulseaudio-discuss, Feng Wei Liam, 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. Cheers, Arun ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-20 12:30 ` Arun Raghavan @ 2012-06-21 2:50 ` Gabriel M. Beddingfield 2012-06-25 1:25 ` Arun Raghavan 2012-06-21 8:30 ` [alsa-devel] " Feng Wei 1 sibling, 1 reply; 17+ messages in thread From: Gabriel M. Beddingfield @ 2012-06-21 2:50 UTC (permalink / raw) To: Arun Raghavan Cc: alsa-devel, broonie, Feng Wei, Liam Girdwood, pulseaudio-discuss On 06/20/2012 07:30 AM, Arun Raghavan wrote: >> 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. Yes, the Galaxy Nexus pretty much only uses PCM 0 -- but that's mostly a reflection of AudioFlinger's design and limitations. -gabriel ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-21 2:50 ` Gabriel M. Beddingfield @ 2012-06-25 1:25 ` Arun Raghavan 0 siblings, 0 replies; 17+ messages in thread From: Arun Raghavan @ 2012-06-25 1:25 UTC (permalink / raw) To: Gabriel M. Beddingfield Cc: alsa-devel, broonie, Feng Wei, Liam Girdwood, pulseaudio-discuss On Wed, 2012-06-20 at 21:50 -0500, Gabriel M. Beddingfield wrote: > On 06/20/2012 07:30 AM, Arun Raghavan wrote: > >> 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. > > Yes, the Galaxy Nexus pretty much only uses PCM 0 -- but that's mostly a > reflection of AudioFlinger's design and limitations. Ah, that's good to know. :) -- Arun ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [alsa-devel] Using UCM with PulseAudio 2012-06-20 12:30 ` Arun Raghavan 2012-06-21 2:50 ` Gabriel M. Beddingfield @ 2012-06-21 8:30 ` Feng Wei 2012-06-25 1:31 ` Arun Raghavan 1 sibling, 1 reply; 17+ messages in thread From: Feng Wei @ 2012-06-21 8:30 UTC (permalink / raw) To: pulseaudio-discuss; +Cc: broonie, Liam Girdwood, alsa-devel 2012/6/20 Arun Raghavan <arun.raghavan@collabora.co.uk>: > Liam, > 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. Sounds fine to me. The only problem is can we always open the modifier pcm when modifier is not enabled. If not, I prefer to create/destroy the sink by events. > > Cheers, > Arun > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel -- Wei.Feng (irc wei_feng) Linaro Multimedia Team Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog _______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-21 8:30 ` [alsa-devel] " Feng Wei @ 2012-06-25 1:31 ` Arun Raghavan 2012-06-25 16:28 ` Arun Raghavan 0 siblings, 1 reply; 17+ messages in thread From: Arun Raghavan @ 2012-06-25 1:31 UTC (permalink / raw) To: Feng Wei; +Cc: alsa-devel, broonie, pulseaudio-discuss, Liam Girdwood On Thu, 2012-06-21 at 16:30 +0800, Feng Wei wrote: > 2012/6/20 Arun Raghavan <arun.raghavan@collabora.co.uk>: > > Liam, > > 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. > Sounds fine to me. The only problem is can we always open the modifier > pcm when modifier is not enabled. If not, I prefer to create/destroy > the sink by events. The alternative is to always add the sink and enable/disable the modifier in the I/O thread since we will get a message when a sink-input is added/removed. I'm just hacking this bit up, and will post patches if it all works out. There is another question here -- whether the modifier sink should have any ports or not. If I understand this correctly, we could let the actual routing be handled by the "main" sink's port and have the modifier sinks not touch that at all by not having any ports. In the ideal world though, it would be nice to have the ability to mark ports as being "dependent" somehow, so that port changes on the main sink would reflect in all others. This would be particularly useful for sinks and sources that have correlated paths like they do in the OMAP4 case. -- Arun ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: Using UCM with PulseAudio 2012-06-25 1:31 ` Arun Raghavan @ 2012-06-25 16:28 ` Arun Raghavan 0 siblings, 0 replies; 17+ messages in thread From: Arun Raghavan @ 2012-06-25 16:28 UTC (permalink / raw) To: Feng Wei; +Cc: alsa-devel, broonie, pulseaudio-discuss, Liam Girdwood On Mon, 2012-06-25 at 07:01 +0530, Arun Raghavan wrote: > On Thu, 2012-06-21 at 16:30 +0800, Feng Wei wrote: > > 2012/6/20 Arun Raghavan <arun.raghavan@collabora.co.uk>: > > > Liam, > > > 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. > > Sounds fine to me. The only problem is can we always open the modifier > > pcm when modifier is not enabled. If not, I prefer to create/destroy > > the sink by events. > > The alternative is to always add the sink and enable/disable the > modifier in the I/O thread since we will get a message when a sink-input > is added/removed. I'm just hacking this bit up, and will post patches if > it all works out. > > There is another question here -- whether the modifier sink should have > any ports or not. If I understand this correctly, we could let the > actual routing be handled by the "main" sink's port and have the > modifier sinks not touch that at all by not having any ports. In the > ideal world though, it would be nice to have the ability to mark ports > as being "dependent" somehow, so that port changes on the main sink > would reflect in all others. This would be particularly useful for sinks > and sources that have correlated paths like they do in the OMAP4 case. Seems things a bit more complicated. There's a PlaybackChannels field on each UCM device -- and it is possible that this might be different between devices? If so, then it would become necessary to expose the devices as ports on the modifier's sink as well, to make sure these things stay in sync. Or am I interpreting things as being more complicated than they really are? -- Arun ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2012-07-23 10:06 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-06-15 2:53 Using UCM with PulseAudio Arun Raghavan 2012-06-15 12:11 ` [pulseaudio-discuss] " Tanu Kaskinen 2012-06-15 17:28 ` Liam Girdwood 2012-06-15 17:34 ` Mark Brown 2012-06-15 17:38 ` Tanu Kaskinen 2012-07-23 3:38 ` Arun Raghavan 2012-07-23 6:33 ` Tanu Kaskinen 2012-07-23 10:06 ` Mark Brown 2012-07-23 7:57 ` Mark Brown 2012-06-15 12:28 ` Mark Brown 2012-06-15 17:08 ` Liam Girdwood 2012-06-20 12:30 ` Arun Raghavan 2012-06-21 2:50 ` Gabriel M. Beddingfield 2012-06-25 1:25 ` Arun Raghavan 2012-06-21 8:30 ` [alsa-devel] " Feng Wei 2012-06-25 1:31 ` Arun Raghavan 2012-06-25 16:28 ` Arun Raghavan
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.