[pulseaudio-discuss] ALSA sink enumeration and multiple devices/subdevices

Stephen Warren swarren at nvidia.com
Tue Aug 24 09:03:51 PDT 2010

pl bossart wrote:
> > What I'm talking about is that pulseaudio is incapable of ever sending
> > audio to anything other than the default device/subdevice within a card,
> > irrespective of whether a cable is plugged in and signal being transmitted.
> ok, I am not sure I understand why there are several devices in the
> first place. Can you elaborate on what these 4 devices are? Can all
> these devices be used concurrently with different streams,ie up to 4
> independent HDMI outputs/cables? Or is each device stereo only, and
> the hardware will multiplex channel pairs on the same HDMI link?

The GPU has four[1] sets of DVI/HDMI/DP pins on the package, and on any
given board, some subset of these is routed out to actual connectors. For
example, there may be two DVI ports and an HDMI port.

[1] I assume since there are 4 HD audio codecs...

For each of these sets of pins, and hence each connector on the board,
there is an HD audio codec. If/when a video signal is being transmitted
across a given connector, the corresponding HD audio codec may be used
to transmit audio along with that signal. There is a 1:1 mapping between
HD audio codec ID (and hence ALSA device-ID) and physical connector. The
exact mapping probably varies from board to board depending on OEM design.

Note that right now, these 4 HD audio codecs are arranged as 1 ALSA card
with 4 devices contained within. I could imagine this could also be
exposed as 1 ALSA card with 1 ALSA device and 4 ALSA subdevices, depending
on HD audio node configuration.

In practice, NVIDIA GPUs only support sending video signals over at most
two of these connectors at once, and hence the HD audio controller only
allows two audio streams to be configured at once. The exact set used can
be dynamically reconfigured by changing xorg.conf or using NVIDIA's tools
to manipulate a running X server; similar to xrandr.

Each of these audio streams may be up to multi-channel, depending on TV
or receiver capabilities. In other words, there aren't 4 stereo-only
streams that get mapped into a single video stream to make a single multi-
channel stream.

I could imagine someone wanting to use pulseaudio to send two entirely
different audio streams to two different monitors at the same time.

I imagine (complete guess) that Intel's and AMD's HDMI support works
similarly, although the number of separate ALSA devices (or subdevices),
the maximum number of streams that can operate at once, and the maximum
capabilities of each stream (e.g. stereo vs. multi-channel) probably
differ. In other words, this architecture is somewhat driven by Intel's
HD audio codec architecture. That said, I suppose this could be exposed
as 1 PCI device, and hence 1 ALSA card, per video connector. That'd be
a lot of extra HW to put on the chip though.


More information about the pulseaudio-discuss mailing list