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$
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_ */
Cache object: 035801f84a49c35a014a98d9377212e1
|