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