sound: Import latest code from FreeBSD
[dragonfly.git] / sys / dev / sound / pcm / matrix_map.h
1 /*-
2  * Copyright (c) 2009 Ariff Abdullah <ariff@FreeBSD.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD: head/sys/dev/sound/pcm/matrix_map.h 243138 2012-11-16 07:05:57Z mav $
27  */
28
29 #ifndef _SND_MATRIX_MAP_H_
30 #define _SND_MATRIX_MAP_H_
31
32 /*
33  * Standard matrix maps:
34  *
35  * struct pcmchan_matrix {
36  *      .id = Matrix identity (see matrix.h). Custom defined should use
37  *            one of SND_CHN_MATRIX_MISC (for whatever purposes) or
38  *            SND_CHN_MATRIX_DRV (hardware driver).
39  *      .channels = Total number of channels, including whatever 'extended'
40  *                  (the X.ext notions, mostly LFE).
41  *      .ext = Total number of extended channels (LFE).
42  *      .map = {
43  *              Sequences of channel type and interleave structure.
44  *              [interleave offset] = {
45  *                      .type = channel type (see matrix.h).
46  *                      .members = Masks of channels that is acceptable as a
47  *                                 member of this channel type.
48  *              },
49  *              [total channels] = {
50  *                      .type = Maximum channels marker (SND_CHN_T_MAX).
51  *                      .members = 0 (no channels allowed here).
52  *              },
53  *      },
54  *      .mask = Mask of channels that exist in this map.
55  *      .offset = {
56  *              channel offset that directly translate to the above interleave
57  *              offset according to SND_CHN_T_* definitions.
58  *      }
59  * };
60  *
61  * Rule of thumb: Avoid using SND_CHN_T_* that is marked with XXX (matrix.h),
62  *                or be prepared for the horror to come.
63  *
64  */
65
66 #define SND_CHN_MATRIX_MAP_1_0  {                                       \
67         .id = SND_CHN_MATRIX_1_0,                                       \
68         .channels = 1,                                                  \
69         .ext = 0,                                                       \
70         .map = {                                                        \
71                 /* Mono, center, etc. */                                \
72                 [0] = {                                                 \
73                         .type = SND_CHN_T_FL,                           \
74                         .members =                                      \
75                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |     \
76                             SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |     \
77                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |     \
78                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL |     \
79                             SND_CHN_T_MASK_SR                           \
80                 },                                                      \
81                 [1] = {                                                 \
82                         .type = SND_CHN_T_MAX,                          \
83                         .members = 0                                    \
84                 }                                                       \
85         },                                                              \
86         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
87                 SND_CHN_T_MASK_FC,                                      \
88         .offset = {  0,  0,  0,  0,  0,  0, -1, -1,  0,                 \
89                      0,  0, -1, -1, -1, -1, -1, -1, -1  }               \
90 }
91
92 #define SND_CHN_MATRIX_MAP_2_0  {                                       \
93         .id = SND_CHN_MATRIX_2_0,                                       \
94         .channels = 2,                                                  \
95         .ext = 0,                                                       \
96         .map = {                                                        \
97                 /* Left */                                              \
98                 [0] = {                                                 \
99                         .type = SND_CHN_T_FL,                           \
100                         .members =                                      \
101                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |     \
102                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |     \
103                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL       \
104                 },                                                      \
105                 /* Right */                                             \
106                 [1] = {                                                 \
107                         .type = SND_CHN_T_FR,                           \
108                         .members =                                      \
109                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |     \
110                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |     \
111                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR       \
112                 },                                                      \
113                 [2] = {                                                 \
114                         .type = SND_CHN_T_MAX,                          \
115                         .members = 0                                    \
116                 }                                                       \
117         },                                                              \
118         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR,                  \
119         .offset = {  0,  1, -1, -1, -1, -1, -1, -1, -1,                 \
120                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
121 }
122
123 #define SND_CHN_MATRIX_MAP_2_1  {                                       \
124         .id = SND_CHN_MATRIX_2_1,                                       \
125         .channels = 3,                                                  \
126         .ext = 1,                                                       \
127         .map = {                                                        \
128                 /* Left */                                              \
129                 [0] = {                                                 \
130                         .type = SND_CHN_T_FL,                           \
131                         .members =                                      \
132                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |     \
133                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |     \
134                             SND_CHN_T_MASK_SL                           \
135                 },                                                      \
136                 /* Right */                                             \
137                 [1] = {                                                 \
138                         .type = SND_CHN_T_FR,                           \
139                         .members =                                      \
140                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |     \
141                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |     \
142                             SND_CHN_T_MASK_SR                           \
143                 },                                                      \
144                 /* LFE */                                               \
145                 [2] = {                                                 \
146                         .type = SND_CHN_T_LF,                           \
147                         .members = SND_CHN_T_MASK_LF                    \
148                 },                                                      \
149                 [3] = {                                                 \
150                         .type = SND_CHN_T_MAX,                          \
151                         .members = 0                                    \
152                 }                                                       \
153         },                                                              \
154         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
155                 SND_CHN_T_MASK_LF,                                      \
156         .offset = {  0,  1, -1,  2, -1, -1, -1, -1, -1,                 \
157                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
158 }
159
160 #define SND_CHN_MATRIX_MAP_3_0  {       /* 3 channels default */        \
161         .id = SND_CHN_MATRIX_3_0,                                       \
162         .channels = 3,                                                  \
163         .ext = 0,                                                       \
164         .map = {                                                        \
165                 /* Left */                                              \
166                 [0] = {                                                 \
167                         .type = SND_CHN_T_FL,                           \
168                         .members =                                      \
169                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |     \
170                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SL       \
171                 },                                                      \
172                 /* Right */                                             \
173                 [1] = {                                                 \
174                         .type = SND_CHN_T_FR,                           \
175                         .members =                                      \
176                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |     \
177                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SR       \
178                 },                                                      \
179                 /* Rear Center */                                       \
180                 [2] = {                                                 \
181                         .type = SND_CHN_T_BC,                           \
182                         .members =                                      \
183                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |     \
184                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |     \
185                             SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR       \
186                 },                                                      \
187                 [3] = {                                                 \
188                         .type = SND_CHN_T_MAX,                          \
189                         .members = 0                                    \
190                 }                                                       \
191         },                                                              \
192         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
193                 SND_CHN_T_MASK_BC,                                      \
194         .offset = {  0,  1, -1, -1, -1, -1, -1, -1,  2,                 \
195                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
196 }
197
198 #define SND_CHN_MATRIX_MAP_3_1  {                                       \
199         .id = SND_CHN_MATRIX_3_1,                                       \
200         .channels = 4,                                                  \
201         .ext = 1,                                                       \
202         .map = {                                                        \
203                 /* Left */                                              \
204                 [0] = {                                                 \
205                         .type = SND_CHN_T_FL,                           \
206                         .members =                                      \
207                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |     \
208                             SND_CHN_T_MASK_SL                           \
209                 },                                                      \
210                 /* Right */                                             \
211                 [1] = {                                                 \
212                         .type = SND_CHN_T_FR,                           \
213                         .members =                                      \
214                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |     \
215                             SND_CHN_T_MASK_SR                           \
216                 },                                                      \
217                 /* LFE */                                               \
218                 [2] = {                                                 \
219                         .type = SND_CHN_T_LF,                           \
220                         .members = SND_CHN_T_MASK_LF                    \
221                 },                                                      \
222                 /* Rear Center */                                       \
223                 [3] = {                                                 \
224                         .type = SND_CHN_T_BC,                           \
225                         .members =                                      \
226                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |     \
227                             SND_CHN_T_MASK_BC |                         \
228                             SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR       \
229                 },                                                      \
230                 [4] = {                                                 \
231                         .type = SND_CHN_T_MAX,                          \
232                         .members = 0                                    \
233                 }                                                       \
234         },                                                              \
235         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
236                 SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BC,                  \
237         .offset = {  0,  1, -1,  2, -1, -1, -1, -1,  3,                 \
238                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
239 }
240
241 #define SND_CHN_MATRIX_MAP_4_0  {                                       \
242         .id = SND_CHN_MATRIX_4_0,                                       \
243         .channels = 4,                                                  \
244         .ext = 0,                                                       \
245         .map = {                                                        \
246                 /* Left */                                              \
247                 [0] = {                                                 \
248                         .type = SND_CHN_T_FL,                           \
249                         .members =                                      \
250                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |     \
251                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SL       \
252                 },                                                      \
253                 /* Right */                                             \
254                 [1] = {                                                 \
255                         .type = SND_CHN_T_FR,                           \
256                         .members =                                      \
257                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |     \
258                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SR       \
259                 },                                                      \
260                 /* Rear Left */                                         \
261                 [2] = {                                                 \
262                         .type = SND_CHN_T_BL,                           \
263                         .members =                                      \
264                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |     \
265                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL       \
266                 },                                                      \
267                 /* Rear Right */                                        \
268                 [3] = {                                                 \
269                         .type = SND_CHN_T_BR,                           \
270                         .members =                                      \
271                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |     \
272                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR       \
273                 },                                                      \
274                 [4] = {                                                 \
275                         .type = SND_CHN_T_MAX,                          \
276                         .members = 0                                    \
277                 }                                                       \
278         },                                                              \
279         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
280                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR,                  \
281         .offset = {  0,  1, -1, -1,  2,  3, -1, -1, -1,                 \
282                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
283 }
284
285 #define SND_CHN_MATRIX_MAP_4_1  {                                       \
286         .id = SND_CHN_MATRIX_4_1,                                       \
287         .channels = 5,                                                  \
288         .ext = 1,                                                       \
289         .map = {                                                        \
290                 /* Left */                                              \
291                 [0] = {                                                 \
292                         .type = SND_CHN_T_FL,                           \
293                         .members =                                      \
294                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |     \
295                             SND_CHN_T_MASK_SL                           \
296                 },                                                      \
297                 /* Right */                                             \
298                 [1] = {                                                 \
299                         .type = SND_CHN_T_FR,                           \
300                         .members =                                      \
301                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |     \
302                             SND_CHN_T_MASK_SR                           \
303                 },                                                      \
304                 /* Rear Left */                                         \
305                 [2] = {                                                 \
306                         .type = SND_CHN_T_BL,                           \
307                         .members =                                      \
308                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |     \
309                             SND_CHN_T_MASK_SL                           \
310                 },                                                      \
311                 /* Rear Right */                                        \
312                 [3] = {                                                 \
313                         .type = SND_CHN_T_BR,                           \
314                         .members =                                      \
315                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |     \
316                             SND_CHN_T_MASK_SR                           \
317                 },                                                      \
318                 /* LFE */                                               \
319                 [4] = {                                                 \
320                         .type = SND_CHN_T_LF,                           \
321                         .members = SND_CHN_T_MASK_LF                    \
322                 },                                                      \
323                 [5] = {                                                 \
324                         .type = SND_CHN_T_MAX,                          \
325                         .members = 0                                    \
326                 }                                                       \
327         },                                                              \
328         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
329                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
330                 SND_CHN_T_MASK_LF,                                      \
331         .offset = {  0,  1, -1,  4,  2,  3, -1, -1, -1,                 \
332                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
333 }
334
335 #define SND_CHN_MATRIX_MAP_5_0  {       /* 5 channels default */        \
336         .id = SND_CHN_MATRIX_5_0,                                       \
337         .channels = 5,                                                  \
338         .ext = 0,                                                       \
339         .map = {                                                        \
340                 /* Left */                                              \
341                 [0] = {                                                 \
342                         .type = SND_CHN_T_FL,                           \
343                         .members =                                      \
344                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF |     \
345                             SND_CHN_T_MASK_SL                           \
346                 },                                                      \
347                 /* Right */                                             \
348                 [1] = {                                                 \
349                         .type = SND_CHN_T_FR,                           \
350                         .members =                                      \
351                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF |     \
352                             SND_CHN_T_MASK_SR                           \
353                 },                                                      \
354                 /* Rear Left */                                         \
355                 [2] = {                                                 \
356                         .type = SND_CHN_T_BL,                           \
357                         .members =                                      \
358                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |     \
359                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL       \
360                 },                                                      \
361                 /* Rear Right */                                        \
362                 [3] = {                                                 \
363                         .type = SND_CHN_T_BR,                           \
364                         .members =                                      \
365                             SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |     \
366                             SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR       \
367                 },                                                      \
368                 /* Center */                                            \
369                 [4] = {                                                 \
370                         .type = SND_CHN_T_FC,                           \
371                         .members = SND_CHN_T_MASK_FC                    \
372                 },                                                      \
373                 [5] = {                                                 \
374                         .type = SND_CHN_T_MAX,                          \
375                         .members = 0                                    \
376                 }                                                       \
377         },                                                              \
378         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
379                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
380                 SND_CHN_T_MASK_FC,                                      \
381         .offset = {  0,  1,  4, -1,  2,  3, -1, -1, -1,                 \
382                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
383 }
384
385 #define SND_CHN_MATRIX_MAP_5_1  {       /* 6 channels default */        \
386         .id = SND_CHN_MATRIX_5_1,                                       \
387         .channels = 6,                                                  \
388         .ext = 1,                                                       \
389         .map = {                                                        \
390                 /* Left */                                              \
391                 [0] = {                                                 \
392                         .type = SND_CHN_T_FL,                           \
393                         .members =                                      \
394                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_SL       \
395                 },                                                      \
396                 /* Right */                                             \
397                 [1] = {                                                 \
398                         .type = SND_CHN_T_FR,                           \
399                         .members =                                      \
400                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_SR       \
401                 },                                                      \
402                 /* Rear Left */                                         \
403                 [2] = {                                                 \
404                         .type = SND_CHN_T_BL,                           \
405                         .members =                                      \
406                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |     \
407                             SND_CHN_T_MASK_SL                           \
408                 },                                                      \
409                 /* Rear Right */                                        \
410                 [3] = {                                                 \
411                         .type = SND_CHN_T_BR,                           \
412                         .members =                                      \
413                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |     \
414                             SND_CHN_T_MASK_SR                           \
415                 },                                                      \
416                 /* Center */                                            \
417                 [4] = {                                                 \
418                         .type = SND_CHN_T_FC,                           \
419                         .members = SND_CHN_T_MASK_FC                    \
420                 },                                                      \
421                 /* LFE */                                               \
422                 [5] = {                                                 \
423                         .type = SND_CHN_T_LF,                           \
424                         .members = SND_CHN_T_MASK_LF                    \
425                 },                                                      \
426                 [6] = {                                                 \
427                         .type = SND_CHN_T_MAX,                          \
428                         .members = 0                                    \
429                 }                                                       \
430         },                                                              \
431         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
432                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
433                 SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF,                  \
434         .offset = {  0,  1,  4,  5,  2,  3, -1, -1, -1,                 \
435                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
436 }
437
438 #define SND_CHN_MATRIX_MAP_6_0  {                                       \
439         .id = SND_CHN_MATRIX_6_0,                                       \
440         .channels = 6,                                                  \
441         .ext = 0,                                                       \
442         .map  = {                                                       \
443                 /* Left */                                              \
444                 [0] = {                                                 \
445                         .type = SND_CHN_T_FL,                           \
446                         .members =                                      \
447                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF |     \
448                             SND_CHN_T_MASK_SL                           \
449                 },                                                      \
450                 /* Right */                                             \
451                 [1] = {                                                 \
452                         .type = SND_CHN_T_FR,                           \
453                         .members =                                      \
454                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF |     \
455                             SND_CHN_T_MASK_SR                           \
456                 },                                                      \
457                 /* Rear Left */                                         \
458                 [2] = {                                                 \
459                         .type = SND_CHN_T_BL,                           \
460                         .members =                                      \
461                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_LF |     \
462                             SND_CHN_T_MASK_SL                           \
463                 },                                                      \
464                 /* Rear Right */                                        \
465                 [3] = {                                                 \
466                         .type = SND_CHN_T_BR,                           \
467                         .members =                                      \
468                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_LF |     \
469                             SND_CHN_T_MASK_SR                           \
470                 },                                                      \
471                 /* Center */                                            \
472                 [4] = {                                                 \
473                         .type = SND_CHN_T_FC,                           \
474                         .members = SND_CHN_T_MASK_FC                    \
475                 },                                                      \
476                 /* Rear Center */                                       \
477                 [5] = {                                                 \
478                         .type = SND_CHN_T_BC,                           \
479                         .members = SND_CHN_T_MASK_BC                    \
480                 },                                                      \
481                 [6] = {                                                 \
482                         .type = SND_CHN_T_MAX,                          \
483                         .members = 0                                    \
484                 }                                                       \
485         },                                                              \
486         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
487                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
488                 SND_CHN_T_MASK_FC | SND_CHN_T_MASK_BC,                  \
489         .offset = {  0,  1,  4, -1,  2,  3, -1, -1,  5,                 \
490                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
491 }
492
493 #define SND_CHN_MATRIX_MAP_6_1  {                                       \
494         .id = SND_CHN_MATRIX_6_1,                                       \
495         .channels = 7,                                                  \
496         .ext = 1,                                                       \
497         .map = {                                                        \
498                 /* Left */                                              \
499                 [0] = {                                                 \
500                         .type = SND_CHN_T_FL,                           \
501                         .members =                                      \
502                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_SL       \
503                 },                                                      \
504                 /* Right */                                             \
505                 [1] = {                                                 \
506                         .type = SND_CHN_T_FR,                           \
507                         .members =                                      \
508                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_SR       \
509                 },                                                      \
510                 /* Rear Left */                                         \
511                 [2] = {                                                 \
512                         .type = SND_CHN_T_BL,                           \
513                         .members =                                      \
514                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_SL       \
515                 },                                                      \
516                 /* Rear Right */                                        \
517                 [3] = {                                                 \
518                         .type = SND_CHN_T_BR,                           \
519                         .members =                                      \
520                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_SR       \
521                 },                                                      \
522                 /* Center */                                            \
523                 [4] = {                                                 \
524                         .type = SND_CHN_T_FC,                           \
525                         .members = SND_CHN_T_MASK_FC                    \
526                 },                                                      \
527                 /* LFE */                                               \
528                 [5] = {                                                 \
529                         .type = SND_CHN_T_LF,                           \
530                         .members = SND_CHN_T_MASK_LF                    \
531                 },                                                      \
532                 /* Rear Center */                                       \
533                 [6] = {                                                 \
534                         .type = SND_CHN_T_BC,                           \
535                         .members = SND_CHN_T_MASK_BC                    \
536                 },                                                      \
537                 [7] = {                                                 \
538                         .type = SND_CHN_T_MAX,                          \
539                         .members = 0                                    \
540                 }                                                       \
541         },                                                              \
542         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
543                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
544                 SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |                 \
545                 SND_CHN_T_MASK_BC,                                      \
546         .offset = {  0,  1,  4,  5,  2,  3, -1, -1,  6,                 \
547                     -1, -1, -1, -1, -1, -1, -1, -1, -1  }               \
548 }
549
550 #define SND_CHN_MATRIX_MAP_7_0  {                                       \
551         .id = SND_CHN_MATRIX_7_0,                                       \
552         .channels = 7,                                                  \
553         .ext = 0,                                                       \
554         .map = {                                                        \
555                 /* Left */                                              \
556                 [0] = {                                                 \
557                         .type = SND_CHN_T_FL,                           \
558                         .members =                                      \
559                             SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF       \
560                 },                                                      \
561                 /* Right */                                             \
562                 [1] = {                                                 \
563                         .type = SND_CHN_T_FR,                           \
564                         .members =                                      \
565                             SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF       \
566                 },                                                      \
567                 /* Rear Left */                                         \
568                 [2] = {                                                 \
569                         .type = SND_CHN_T_BL,                           \
570                         .members =                                      \
571                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |     \
572                             SND_CHN_T_MASK_LF                           \
573                 },                                                      \
574                 /* Rear Right */                                        \
575                 [3] = {                                                 \
576                         .type = SND_CHN_T_BR,                           \
577                         .members =                                      \
578                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |     \
579                             SND_CHN_T_MASK_LF                           \
580                 },                                                      \
581                 /* Center */                                            \
582                 [4] = {                                                 \
583                         .type = SND_CHN_T_FC,                           \
584                         .members =                                      \
585                             SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF       \
586                 },                                                      \
587                 /* Side Left */                                         \
588                 [5] = {                                                 \
589                         .type = SND_CHN_T_SL,                           \
590                         .members =                                      \
591                             SND_CHN_T_MASK_SL | SND_CHN_T_MASK_LF       \
592                 },                                                      \
593                 /* Side Right */                                        \
594                 [6] = {                                                 \
595                         .type = SND_CHN_T_SR,                           \
596                         .members =                                      \
597                             SND_CHN_T_MASK_SR | SND_CHN_T_MASK_LF       \
598                 },                                                      \
599                 [7] = {                                                 \
600                         .type = SND_CHN_T_MAX,                          \
601                         .members = 0                                    \
602                 }                                                       \
603         },                                                              \
604         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
605                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
606                 SND_CHN_T_MASK_FC |                                     \
607                 SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR,                  \
608         .offset = {  0,  1,  4, -1,  2,  3, -1, -1, -1,                 \
609                      5,  6, -1, -1, -1, -1, -1, -1, -1  }               \
610 }
611
612 #define SND_CHN_MATRIX_MAP_7_1  {                                       \
613         .id = SND_CHN_MATRIX_7_1,                                       \
614         .channels = 8,                                                  \
615         .ext = 1,                                                       \
616         .map = {                                                        \
617                 /* Left */                                              \
618                 [0] = {                                                 \
619                         .type = SND_CHN_T_FL,                           \
620                         .members = SND_CHN_T_MASK_FL                    \
621                 },                                                      \
622                 /* Right */                                             \
623                 [1] = {                                                 \
624                         .type = SND_CHN_T_FR,                           \
625                         .members = SND_CHN_T_MASK_FR                    \
626                 },                                                      \
627                 /* Rear Left */                                         \
628                 [2] = {                                                 \
629                         .type = SND_CHN_T_BL,                           \
630                         .members =                                      \
631                             SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC       \
632                 },                                                      \
633                 /* Rear Right */                                        \
634                 [3] = {                                                 \
635                         .type = SND_CHN_T_BR,                           \
636                         .members =                                      \
637                             SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC       \
638                 },                                                      \
639                 /* Center */                                            \
640                 [4] = {                                                 \
641                         .type = SND_CHN_T_FC,                           \
642                         .members = SND_CHN_T_MASK_FC                    \
643                 },                                                      \
644                 /* LFE */                                               \
645                 [5] = {                                                 \
646                         .type = SND_CHN_T_LF,                           \
647                         .members = SND_CHN_T_MASK_LF                    \
648                 },                                                      \
649                 /* Side Left */                                         \
650                 [6] = {                                                 \
651                         .type = SND_CHN_T_SL,                           \
652                         .members = SND_CHN_T_MASK_SL                    \
653                 },                                                      \
654                 /* Side Right */                                        \
655                 [7] = {                                                 \
656                         .type = SND_CHN_T_SR,                           \
657                         .members = SND_CHN_T_MASK_SR                    \
658                 },                                                      \
659                 [8] = {                                                 \
660                         .type = SND_CHN_T_MAX,                          \
661                         .members = 0                                    \
662                 }                                                       \
663         },                                                              \
664         .mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |                 \
665                 SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |                 \
666                 SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |                 \
667                 SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR,                  \
668         .offset = {  0,  1,  4,  5,  2,  3, -1, -1, -1,                 \
669                      6,  7, -1, -1, -1, -1, -1, -1, -1  }               \
670 }
671
672 #endif  /* !_SND_MATRIX_MAP_H_ */