Re: [alsa-devel] [PATCH 0/4] Intel HDMI audio fixes

At Fri, 13 Feb 2009 09:28:22 -0800, Shane W wrote:
On Thu, Feb 12, 2009 at 12:41:11PM +0800, Wu Fengguang wrote:
static const char *channel_name[MAX_CHANNELS] = { /* 0 */ N_("Front Left"), /* 1 */ N_("Front Right"), /* 2 */ N_("Rear Left"), /* 3 */ N_("Rear Right"), /* 4 */ N_("Center"), /* wav file is "Front Center.wav" */ /* 5 */ N_("LFE"), /* wav file is "Rear Center.wav" */ /* 6 */ N_("Side Left"), /* 7 */ N_("Side Right"),
Whereas the HDMI channel mapping selected for 6-channel playback is
{ .ca_index = 0x0b, .speakers = { 0, 0, RR, RL, FC, LFE, FR, FL } },
Here the two mappings disagree on channels other than Front Left/Right.
In theory the channel mapping should be adjusted via AC_VERB_SET_HDMI_CHAN_SLOT. However I found that verb takes no effect for G35/G45. So I'm afraid there's no trivial ways we can adjust the channel mapping.
If the driver can't reorder the channels to what ALSA needs, is it possible to do it somewhere else like HDA-Intel.conf and use the routing plugin somehow to reorder things. Say for plughw:0,3 or modify the surround51 device?
I don't know much about this interface but it looks like channel routing is possible here.
Well, it's a good question. Right now, surround51 is used for the analog output which usually has the "right" ALSA channel mapping. So, we need to detect and switch the mapping using a plugin on the fly, and that's not so trivial.
Besides, the problem arises when both analog 5.1 and HDMI 5.1 are implemented in the same "card". Since a "card" is defined by a controller, not by a codec as now, one card may have both 5.1 outputs.
We might need to switch to a codec-based card approach sometime later, but I've postponed it simply because it can break so easily the compatibility with older versions...
Anyway, the channel mapping issue is a missing piece. There are a few more issues, some to be implemented and some to be improved and fixed.
Takashi
participants (1)
-
Takashi Iwai