€•0[Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ5/translations/zh_CN/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/zh_TW/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/it_IT/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/ja_JP/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/ko_KR/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/pt_BR/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ5/translations/sp_SP/sound/designs/channel-mapping-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒALSA PCM channel-mapping API”h]”hŒALSA PCM channel-mapping API”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/sound/designs/channel-mapping-api.rst”h´KubhŒ paragraph”“”)”}”(hŒTakashi Iwai ”h]”(hŒTakashi Iwai <”…””}”(hhÍh²hh³Nh´NubhŒ reference”“”)”}”(hŒ tiwai@suse.de”h]”hŒ tiwai@suse.de”…””}”(hh×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:tiwai@suse.de”uh1hÕhhÍubhŒ>”…””}”(hhÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)”}”(hhh]”(h»)”}”(hŒGeneral”h]”hŒGeneral”…””}”(hhôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhñh²hh³hÊh´KubhÌ)”}”(hŒ¤The channel mapping API allows user to query the possible channel maps and the current channel map, also optionally to modify the channel map of the current stream.”h]”hŒ¤The channel mapping API allows user to query the possible channel maps and the current channel map, also optionally to modify the channel map of the current stream.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hhñh²hubhÌ)”}”(hŒüA channel map is an array of position for each PCM channel. Typically, a stereo PCM stream has a channel map of ``{ front_left, front_right }`` while a 4.0 surround PCM stream has a channel map of ``{ front left, front right, rear left, rear right }.``”h]”(hŒpA channel map is an array of position for each PCM channel. Typically, a stereo PCM stream has a channel map of ”…””}”(hjh²hh³Nh´NubhŒliteral”“”)”}”(hŒ``{ front_left, front_right }``”h]”hŒ{ front_left, front_right }”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ6 while a 4.0 surround PCM stream has a channel map of ”…””}”(hjh²hh³Nh´Nubj)”}”(hŒ7``{ front left, front right, rear left, rear right }.``”h]”hŒ3{ front left, front right, rear left, rear right }.”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhñh²hubhÌ)”}”(hXŠThe problem, so far, was that we had no standard channel map explicitly, and applications had no way to know which channel corresponds to which (speaker) position. Thus, applications applied wrong channels for 5.1 outputs, and you hear suddenly strange sound from rear. Or, some devices secretly assume that center/LFE is the third/fourth channels while others that C/LFE as 5th/6th channels.”h]”hXŠThe problem, so far, was that we had no standard channel map explicitly, and applications had no way to know which channel corresponds to which (speaker) position. Thus, applications applied wrong channels for 5.1 outputs, and you hear suddenly strange sound from rear. Or, some devices secretly assume that center/LFE is the third/fourth channels while others that C/LFE as 5th/6th channels.”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhñh²hubhÌ)”}”(hXAlso, some devices such as HDMI are configurable for different speaker positions even with the same number of total channels. However, there was no way to specify this because of lack of channel map specification. These are the main motivations for the new channel mapping API.”h]”hXAlso, some devices such as HDMI are configurable for different speaker positions even with the same number of total channels. However, there was no way to specify this because of lack of channel map specification. These are the main motivations for the new channel mapping API.”…””}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhñh²hubeh}”(h]”Œgeneral”ah ]”h"]”Œgeneral”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒDesign”h]”hŒDesign”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjdh²hh³hÊh´K#ubhÌ)”}”(hŒ¡Actually, "the channel mapping API" doesn't introduce anything new in the kernel/user-space ABI perspective. It uses only the existing control element features.”h]”hŒ§Actually, “the channel mapping API†doesn’t introduce anything new in the kernel/user-space ABI perspective. It uses only the existing control element features.”…””}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K%hjdh²hubhÌ)”}”(hŒ As a ground design, each PCM substream may contain a control element providing the channel mapping information and configuration. This element is specified by:”h]”hŒ As a ground design, each PCM substream may contain a control element providing the channel mapping information and configuration. This element is specified by:”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hjdh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ iface = SNDRV_CTL_ELEM_IFACE_PCM”h]”hÌ)”}”(hjšh]”hŒ iface = SNDRV_CTL_ELEM_IFACE_PCM”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j–hj“h²hh³hÊh´Nubj—)”}”(hŒ6name = "Playback Channel Map" or "Capture Channel Map"”h]”hÌ)”}”(hj±h]”hŒ>name = “Playback Channel Map†or “Capture Channel Map—…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j–hj“h²hh³hÊh´Nubj—)”}”(hŒ>device = the same device number for the assigned PCM substream”h]”hÌ)”}”(hjÈh]”hŒ>device = the same device number for the assigned PCM substream”…””}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j–hj“h²hh³hÊh´Nubj—)”}”(hŒ=index = the same index number for the assigned PCM substream ”h]”hÌ)”}”(hŒ