xbmc/xbmc — pull request #4868 by anssih (2014-06-08 13:35:16+00:00)
Title: Add support for ALSA channel mapping API

```
Add support for the ALSA channel mapping API. This functionality
requires alsa-lib v1.0.27.

This allows
1) selection of a best-matching channel layout when multiple layouts are
available, and
2) reporting the actual layout back to AE, instead of the ALSA default
legacy layout which is sometimes incorrect.

In practice, this means:

1) Devices that do not use the standard ALSA layout will now have
correct channel mapping without ALSA configuration tricks. Such
devices include at least:
- 1st gen NVIDIA ION
- some 2.1 laptop speakers
- many embedded audio devices

2) HDMI output is now possible at "proper" 2.1, 5.0 PCM layouts (and any
of the more unusual ones, such as 4.1, 3f, 2f+1r) without resorting to
adding empty channels as such layouts are handled currently. This
means that the A/V receiver will now see the correct format, instead
of the "virtual" 5.1/7.1.

3) HDMI output is now configured to use the exact layout given from AE,
when possible, so that AE does not need to do any remapping if it
does not want to (the audio hardware will perform that instead).

4) Layouts containing the more unusual channel positions such as
AE_CH_TFL, AE_CH_TC, etc, are now supported by the ALSA sink.
However, currently CActiveAE::ApplySettingsToFormat() always
force-resolves the stream layout to a standard layout, preventing
the playback of such channels for now.

2,3,4 above require this post-v1.0.27.2 alsa-lib fix in most cases:
http://git.alsa-project.org/?p=alsa-lib.git;a=commitdiff;h=042223c4ee9b17ba8a24bcfc4019f24b69b8310b

Some Linux kernels between 3.7 and 3.12 contain bugs in the HDA HDMI
driver causing incorrect multichannel mapping in some cases. The most
severe issues that affected common channel layouts were fixed in
November 2013 in versions 3.10.20, 3.11.9, 3.12.1, the rest in 3.12.15
and 3.13.

To avoid any regressions, blacklist everything between 3.7 and 3.12.15.
```

@fritsch, @FernetMenta - opinions and suggestions welcome.