…ully fix gui scramble
…t makes no sense
The current ALSA device enumeration code steps through all the hardware ALSA cards and devices while trying to guess the symbolic "hdmi" and "iec958" names that will be used with ALSA. It misses any virtual devices, such as "pulse" or "default". In addition, it didn't have any handling for "surroundXX", which is needed on many cards to get multi-channel analog output. Also, it didn't find "iec958" devices that have no separate hardware device from the analog device, like on USB sound cards. Solve those issues by rewriting the ALSA device handling code to use the ALSA device name hints to determine which devices should be used. This is the same method "aplay -L" uses. The code will automatically use the correct front/surround40/surround51/ surround71 device depending on the amount of channels requested. This is achieved with a magic "@" in the beginning of the device string, which will be replaced with the wanted base device name ("front", "surround51", etc.). In addition, the "sysdefault" and "default" dmix-enabled (allowing shared usage) outputs will be automatically used when available, for stereo streams that have the same sample rate as the ALSA dmix mixer has (normally 48000Hz). The enumeration code will now add a preferred "Default" device, which is the ALSA default device. This allows XBMC to follow the system-wide configuration, so that when the user e.g. modifies /etc/asound.conf or changes environment variables ($ALSA_CARD etc.), XBMC will follow those. The device name of the "Default" device will be either "default" or "@", depending on if the default device needs "surroundXX" mangling for multichannel support (normal analog devices need it, but if the ALSA default is e.g. the pulseaudio sound server, it is not needed nor wanted). Also, additional differentation (device number and/or card id) is now added to the device names when identical names were found by enumeration. Additionally, the AES parameters are now set even when not using passthrough for S/PDIF and HDMI devices as specified by IEC 60958. The code will fallback to not setting the parameters since it may sometimes fail if e.g. using a custom device that does not accept them. The behavior of setting parameters (channel count, sample rate) is not altered.