1193640Sariff/*-
2193640Sariff * Copyright (c) 2009 Ariff Abdullah <ariff@FreeBSD.org>
3193640Sariff * All rights reserved.
4193640Sariff *
5193640Sariff * Redistribution and use in source and binary forms, with or without
6193640Sariff * modification, are permitted provided that the following conditions
7193640Sariff * are met:
8193640Sariff * 1. Redistributions of source code must retain the above copyright
9193640Sariff *    notice, this list of conditions and the following disclaimer.
10193640Sariff * 2. Redistributions in binary form must reproduce the above copyright
11193640Sariff *    notice, this list of conditions and the following disclaimer in the
12193640Sariff *    documentation and/or other materials provided with the distribution.
13193640Sariff *
14193640Sariff * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15193640Sariff * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16193640Sariff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17193640Sariff * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18193640Sariff * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19193640Sariff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20193640Sariff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21193640Sariff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22193640Sariff * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23193640Sariff * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24193640Sariff * SUCH DAMAGE.
25193640Sariff *
26193640Sariff * $FreeBSD: releng/10.3/sys/dev/sound/pcm/matrix_map.h 243138 2012-11-16 07:05:57Z mav $
27193640Sariff */
28193640Sariff
29193640Sariff#ifndef _SND_MATRIX_MAP_H_
30193640Sariff#define _SND_MATRIX_MAP_H_
31193640Sariff
32193640Sariff/*
33193640Sariff * Standard matrix maps:
34193640Sariff *
35193640Sariff * struct pcmchan_matrix {
36193640Sariff * 	.id = Matrix identity (see matrix.h). Custom defined should use
37193640Sariff * 	      one of SND_CHN_MATRIX_MISC (for whatever purposes) or
38193640Sariff * 	      SND_CHN_MATRIX_DRV (hardware driver).
39193640Sariff * 	.channels = Total number of channels, including whatever 'extended'
40193640Sariff * 		    (the X.ext notions, mostly LFE).
41193640Sariff * 	.ext = Total number of extended channels (LFE).
42193640Sariff * 	.map = {
43193640Sariff * 		Sequences of channel type and interleave structure.
44193640Sariff * 		[interleave offset] = {
45193640Sariff * 			.type = channel type (see matrix.h).
46193640Sariff * 			.members = Masks of channels that is acceptable as a
47193640Sariff * 				   member of this channel type.
48193640Sariff * 		},
49193640Sariff * 		[total channels] = {
50193640Sariff * 			.type = Maximum channels marker (SND_CHN_T_MAX).
51193640Sariff * 			.members = 0 (no channels allowed here).
52193640Sariff * 		},
53193640Sariff * 	},
54193640Sariff * 	.mask = Mask of channels that exist in this map.
55193640Sariff * 	.offset = {
56193640Sariff * 		channel offset that directly translate to the above interleave
57193640Sariff * 		offset according to SND_CHN_T_* definitions.
58193640Sariff * 	}
59193640Sariff * };
60193640Sariff *
61193640Sariff * Rule of thumb: Avoid using SND_CHN_T_* that is marked with XXX (matrix.h),
62193640Sariff *                or be prepared for the horror to come.
63193640Sariff *
64193640Sariff */
65193640Sariff
66193640Sariff#define SND_CHN_MATRIX_MAP_1_0	{					\
67193640Sariff	.id = SND_CHN_MATRIX_1_0,					\
68193640Sariff	.channels = 1,							\
69193640Sariff	.ext = 0,							\
70193640Sariff	.map = {							\
71193640Sariff		/* Mono, center, etc. */				\
72193640Sariff		[0] = {							\
73193640Sariff			.type = SND_CHN_T_FL,				\
74193640Sariff			.members =					\
75193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |	\
76193640Sariff			    SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |	\
77193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |	\
78193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL |	\
79193640Sariff			    SND_CHN_T_MASK_SR				\
80193640Sariff		},							\
81193640Sariff		[1] = {							\
82193640Sariff			.type = SND_CHN_T_MAX,				\
83193640Sariff			.members = 0					\
84193640Sariff		}							\
85193640Sariff	},								\
86193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
87193640Sariff		SND_CHN_T_MASK_FC,					\
88193640Sariff	.offset = {  0,  0,  0,  0,  0,  0, -1, -1,  0,			\
89193640Sariff		     0,  0, -1, -1, -1, -1, -1, -1, -1  }		\
90193640Sariff}
91193640Sariff
92193640Sariff#define SND_CHN_MATRIX_MAP_2_0	{					\
93193640Sariff	.id = SND_CHN_MATRIX_2_0,					\
94193640Sariff	.channels = 2,							\
95193640Sariff	.ext = 0,							\
96193640Sariff	.map = {							\
97193640Sariff		/* Left */						\
98193640Sariff		[0] = {							\
99193640Sariff			.type = SND_CHN_T_FL,				\
100193640Sariff			.members =					\
101193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
102193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |	\
103193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL	\
104193640Sariff		},							\
105193640Sariff		/* Right */						\
106193640Sariff		[1] = {							\
107193640Sariff			.type = SND_CHN_T_FR,				\
108193640Sariff			.members =					\
109193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
110193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |	\
111193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR	\
112193640Sariff		},							\
113193640Sariff		[2] = {							\
114193640Sariff			.type = SND_CHN_T_MAX,				\
115193640Sariff			.members = 0					\
116193640Sariff		}							\
117193640Sariff	},								\
118193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR,			\
119193640Sariff	.offset = {  0,  1, -1, -1, -1, -1, -1, -1, -1,			\
120193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
121193640Sariff}
122193640Sariff
123193640Sariff#define SND_CHN_MATRIX_MAP_2_1	{					\
124193640Sariff	.id = SND_CHN_MATRIX_2_1,					\
125193640Sariff	.channels = 3,							\
126193640Sariff	.ext = 1,							\
127193640Sariff	.map = {							\
128193640Sariff		/* Left */						\
129193640Sariff		[0] = {							\
130193640Sariff			.type = SND_CHN_T_FL,				\
131193640Sariff			.members =					\
132193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
133193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |	\
134193640Sariff			    SND_CHN_T_MASK_SL				\
135193640Sariff		},							\
136193640Sariff		/* Right */						\
137193640Sariff		[1] = {							\
138193640Sariff			.type = SND_CHN_T_FR,				\
139193640Sariff			.members =					\
140193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
141193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
142193640Sariff			    SND_CHN_T_MASK_SR				\
143193640Sariff		},							\
144193640Sariff		/* LFE */						\
145193640Sariff		[2] = {							\
146193640Sariff			.type = SND_CHN_T_LF,				\
147193640Sariff			.members = SND_CHN_T_MASK_LF			\
148193640Sariff		},							\
149193640Sariff		[3] = {							\
150193640Sariff			.type = SND_CHN_T_MAX,				\
151193640Sariff			.members = 0					\
152193640Sariff		}							\
153193640Sariff	},								\
154193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
155193640Sariff		SND_CHN_T_MASK_LF,					\
156193640Sariff	.offset = {  0,  1, -1,  2, -1, -1, -1, -1, -1,			\
157193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
158193640Sariff}
159193640Sariff
160193640Sariff#define SND_CHN_MATRIX_MAP_3_0	{	/* 3 channels default */	\
161193640Sariff	.id = SND_CHN_MATRIX_3_0,					\
162193640Sariff	.channels = 3,							\
163193640Sariff	.ext = 0,							\
164193640Sariff	.map = {							\
165193640Sariff		/* Left */						\
166193640Sariff		[0] = {							\
167193640Sariff			.type = SND_CHN_T_FL,				\
168193640Sariff			.members =					\
169193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
170193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SL	\
171193640Sariff		},							\
172193640Sariff		/* Right */						\
173193640Sariff		[1] = {							\
174193640Sariff			.type = SND_CHN_T_FR,				\
175193640Sariff			.members =					\
176193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
177193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SR	\
178193640Sariff		},							\
179193640Sariff		/* Rear Center */					\
180193640Sariff		[2] = {							\
181193640Sariff			.type = SND_CHN_T_BC,				\
182193640Sariff			.members =					\
183193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |	\
184193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
185193640Sariff			    SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR	\
186193640Sariff		},							\
187193640Sariff		[3] = {							\
188193640Sariff			.type = SND_CHN_T_MAX,				\
189193640Sariff			.members = 0					\
190193640Sariff		}							\
191193640Sariff	},								\
192193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
193193640Sariff		SND_CHN_T_MASK_BC,					\
194193640Sariff	.offset = {  0,  1, -1, -1, -1, -1, -1, -1,  2,			\
195193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
196193640Sariff}
197193640Sariff
198243138Smav#define SND_CHN_MATRIX_MAP_3_1	{					\
199243138Smav	.id = SND_CHN_MATRIX_3_1,					\
200243138Smav	.channels = 4,							\
201243138Smav	.ext = 1,							\
202243138Smav	.map = {							\
203243138Smav		/* Left */						\
204243138Smav		[0] = {							\
205243138Smav			.type = SND_CHN_T_FL,				\
206243138Smav			.members =					\
207243138Smav			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
208243138Smav			    SND_CHN_T_MASK_SL				\
209243138Smav		},							\
210243138Smav		/* Right */						\
211243138Smav		[1] = {							\
212243138Smav			.type = SND_CHN_T_FR,				\
213243138Smav			.members =					\
214243138Smav			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
215243138Smav			    SND_CHN_T_MASK_SR				\
216243138Smav		},							\
217243138Smav		/* LFE */						\
218243138Smav		[2] = {							\
219243138Smav			.type = SND_CHN_T_LF,				\
220243138Smav			.members = SND_CHN_T_MASK_LF			\
221243138Smav		},							\
222243138Smav		/* Rear Center */					\
223243138Smav		[3] = {							\
224243138Smav			.type = SND_CHN_T_BC,				\
225243138Smav			.members =					\
226243138Smav			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |	\
227243138Smav			    SND_CHN_T_MASK_BC |				\
228243138Smav			    SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR	\
229243138Smav		},							\
230243138Smav		[4] = {							\
231243138Smav			.type = SND_CHN_T_MAX,				\
232243138Smav			.members = 0					\
233243138Smav		}							\
234243138Smav	},								\
235243138Smav	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
236243138Smav		SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BC,			\
237243138Smav	.offset = {  0,  1, -1,  2, -1, -1, -1, -1,  3,			\
238243138Smav		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
239243138Smav}
240243138Smav
241193640Sariff#define SND_CHN_MATRIX_MAP_4_0	{					\
242193640Sariff	.id = SND_CHN_MATRIX_4_0,					\
243193640Sariff	.channels = 4,							\
244193640Sariff	.ext = 0,							\
245193640Sariff	.map = {							\
246193640Sariff		/* Left */						\
247193640Sariff		[0] = {							\
248193640Sariff			.type = SND_CHN_T_FL,				\
249193640Sariff			.members =					\
250193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
251193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SL	\
252193640Sariff		},							\
253193640Sariff		/* Right */						\
254193640Sariff		[1] = {							\
255193640Sariff			.type = SND_CHN_T_FR,				\
256193640Sariff			.members =					\
257193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
258193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SR	\
259193640Sariff		},							\
260193640Sariff		/* Rear Left */						\
261193640Sariff		[2] = {							\
262193640Sariff			.type = SND_CHN_T_BL,				\
263193640Sariff			.members =					\
264193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |	\
265193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL	\
266193640Sariff		},							\
267193640Sariff		/* Rear Right */					\
268193640Sariff		[3] = {							\
269193640Sariff			.type = SND_CHN_T_BR,				\
270193640Sariff			.members =					\
271193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |	\
272193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR	\
273193640Sariff		},							\
274193640Sariff		[4] = {							\
275193640Sariff			.type = SND_CHN_T_MAX,				\
276193640Sariff			.members = 0					\
277193640Sariff		}							\
278193640Sariff	},								\
279193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
280193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR,			\
281193640Sariff	.offset = {  0,  1, -1, -1,  2,  3, -1, -1, -1,			\
282193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
283193640Sariff}
284193640Sariff
285193640Sariff#define SND_CHN_MATRIX_MAP_4_1	{					\
286193640Sariff	.id = SND_CHN_MATRIX_4_1,					\
287193640Sariff	.channels = 5,							\
288193640Sariff	.ext = 1,							\
289193640Sariff	.map = {							\
290193640Sariff		/* Left */						\
291193640Sariff		[0] = {							\
292193640Sariff			.type = SND_CHN_T_FL,				\
293193640Sariff			.members =					\
294193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
295193640Sariff			    SND_CHN_T_MASK_SL				\
296193640Sariff		},							\
297193640Sariff		/* Right */						\
298193640Sariff		[1] = {							\
299193640Sariff			.type = SND_CHN_T_FR,				\
300193640Sariff			.members =					\
301193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
302193640Sariff			    SND_CHN_T_MASK_SR				\
303193640Sariff		},							\
304193640Sariff		/* Rear Left */						\
305193640Sariff		[2] = {							\
306193640Sariff			.type = SND_CHN_T_BL,				\
307193640Sariff			.members =					\
308193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |	\
309193640Sariff			    SND_CHN_T_MASK_SL				\
310193640Sariff		},							\
311193640Sariff		/* Rear Right */					\
312193640Sariff		[3] = {							\
313193640Sariff			.type = SND_CHN_T_BR,				\
314193640Sariff			.members =					\
315193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
316193640Sariff			    SND_CHN_T_MASK_SR				\
317193640Sariff		},							\
318193640Sariff		/* LFE */						\
319193640Sariff		[4] = {							\
320193640Sariff			.type = SND_CHN_T_LF,				\
321193640Sariff			.members = SND_CHN_T_MASK_LF			\
322193640Sariff		},							\
323193640Sariff		[5] = {							\
324193640Sariff			.type = SND_CHN_T_MAX,				\
325193640Sariff			.members = 0					\
326193640Sariff		}							\
327193640Sariff	},								\
328193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
329193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
330193640Sariff		SND_CHN_T_MASK_LF,					\
331193640Sariff	.offset = {  0,  1, -1,  4,  2,  3, -1, -1, -1,			\
332193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
333193640Sariff}
334193640Sariff
335193640Sariff#define SND_CHN_MATRIX_MAP_5_0	{	/* 5 channels default */	\
336193640Sariff	.id = SND_CHN_MATRIX_5_0,					\
337193640Sariff	.channels = 5,							\
338193640Sariff	.ext = 0,							\
339193640Sariff	.map = {							\
340193640Sariff		/* Left */						\
341193640Sariff		[0] = {							\
342193640Sariff			.type = SND_CHN_T_FL,				\
343193640Sariff			.members =					\
344193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF |	\
345193640Sariff			    SND_CHN_T_MASK_SL				\
346193640Sariff		},							\
347193640Sariff		/* Right */						\
348193640Sariff		[1] = {							\
349193640Sariff			.type = SND_CHN_T_FR,				\
350193640Sariff			.members =					\
351193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF |	\
352193640Sariff			    SND_CHN_T_MASK_SR				\
353193640Sariff		},							\
354193640Sariff		/* Rear Left */						\
355193640Sariff		[2] = {							\
356193640Sariff			.type = SND_CHN_T_BL,				\
357193640Sariff			.members =					\
358193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |	\
359193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL	\
360193640Sariff		},							\
361193640Sariff		/* Rear Right */					\
362193640Sariff		[3] = {							\
363193640Sariff			.type = SND_CHN_T_BR,				\
364193640Sariff			.members =					\
365193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |	\
366193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR	\
367193640Sariff		},							\
368193640Sariff		/* Center */						\
369193640Sariff		[4] = {							\
370193640Sariff			.type = SND_CHN_T_FC,				\
371193640Sariff			.members = SND_CHN_T_MASK_FC			\
372193640Sariff		},							\
373193640Sariff		[5] = {							\
374193640Sariff			.type = SND_CHN_T_MAX,				\
375193640Sariff			.members = 0					\
376193640Sariff		}							\
377193640Sariff	},								\
378193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
379193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
380193640Sariff		SND_CHN_T_MASK_FC,					\
381193640Sariff	.offset = {  0,  1,  4, -1,  2,  3, -1, -1, -1,			\
382193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
383193640Sariff}
384193640Sariff
385193640Sariff#define SND_CHN_MATRIX_MAP_5_1	{	/* 6 channels default */	\
386193640Sariff	.id = SND_CHN_MATRIX_5_1,					\
387193640Sariff	.channels = 6,							\
388193640Sariff	.ext = 1,							\
389193640Sariff	.map = {							\
390193640Sariff		/* Left */						\
391193640Sariff		[0] = {							\
392193640Sariff			.type = SND_CHN_T_FL,				\
393193640Sariff			.members =					\
394193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_SL	\
395193640Sariff		},							\
396193640Sariff		/* Right */						\
397193640Sariff		[1] = {							\
398193640Sariff			.type = SND_CHN_T_FR,				\
399193640Sariff			.members =					\
400193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_SR	\
401193640Sariff		},							\
402193640Sariff		/* Rear Left */						\
403193640Sariff		[2] = {							\
404193640Sariff			.type = SND_CHN_T_BL,				\
405193640Sariff			.members =					\
406193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |	\
407193640Sariff			    SND_CHN_T_MASK_SL				\
408193640Sariff		},							\
409193640Sariff		/* Rear Right */					\
410193640Sariff		[3] = {							\
411193640Sariff			.type = SND_CHN_T_BR,				\
412193640Sariff			.members =					\
413193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
414193640Sariff			    SND_CHN_T_MASK_SR				\
415193640Sariff		},							\
416193640Sariff		/* Center */						\
417193640Sariff		[4] = {							\
418193640Sariff			.type = SND_CHN_T_FC,				\
419193640Sariff			.members = SND_CHN_T_MASK_FC			\
420193640Sariff		},							\
421193640Sariff		/* LFE */						\
422193640Sariff		[5] = {							\
423193640Sariff			.type = SND_CHN_T_LF,				\
424193640Sariff			.members = SND_CHN_T_MASK_LF			\
425193640Sariff		},							\
426193640Sariff		[6] = {							\
427193640Sariff			.type = SND_CHN_T_MAX,				\
428193640Sariff			.members = 0					\
429193640Sariff		}							\
430193640Sariff	},								\
431193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
432193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
433193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF,			\
434193640Sariff	.offset = {  0,  1,  4,  5,  2,  3, -1, -1, -1,			\
435193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
436193640Sariff}
437193640Sariff
438193640Sariff#define SND_CHN_MATRIX_MAP_6_0	{					\
439193640Sariff	.id = SND_CHN_MATRIX_6_0,					\
440193640Sariff	.channels = 6,							\
441193640Sariff	.ext = 0,							\
442193640Sariff	.map  = {							\
443193640Sariff		/* Left */						\
444193640Sariff		[0] = {							\
445193640Sariff			.type = SND_CHN_T_FL,				\
446193640Sariff			.members =					\
447193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF |	\
448193640Sariff			    SND_CHN_T_MASK_SL				\
449193640Sariff		},							\
450193640Sariff		/* Right */						\
451193640Sariff		[1] = {							\
452193640Sariff			.type = SND_CHN_T_FR,				\
453193640Sariff			.members =					\
454193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF |	\
455193640Sariff			    SND_CHN_T_MASK_SR				\
456193640Sariff		},							\
457193640Sariff		/* Rear Left */						\
458193640Sariff		[2] = {							\
459193640Sariff			.type = SND_CHN_T_BL,				\
460193640Sariff			.members =					\
461193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_LF |	\
462193640Sariff			    SND_CHN_T_MASK_SL				\
463193640Sariff		},							\
464193640Sariff		/* Rear Right */					\
465193640Sariff		[3] = {							\
466193640Sariff			.type = SND_CHN_T_BR,				\
467193640Sariff			.members =					\
468193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_LF |	\
469193640Sariff			    SND_CHN_T_MASK_SR				\
470193640Sariff		},							\
471193640Sariff		/* Center */						\
472193640Sariff		[4] = {							\
473193640Sariff			.type = SND_CHN_T_FC,				\
474193640Sariff			.members = SND_CHN_T_MASK_FC			\
475193640Sariff		},							\
476193640Sariff		/* Rear Center */					\
477193640Sariff		[5] = {							\
478193640Sariff			.type = SND_CHN_T_BC,				\
479193640Sariff			.members = SND_CHN_T_MASK_BC			\
480193640Sariff		},							\
481193640Sariff		[6] = {							\
482193640Sariff			.type = SND_CHN_T_MAX,				\
483193640Sariff			.members = 0					\
484193640Sariff		}							\
485193640Sariff	},								\
486193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
487193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
488193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_BC,			\
489193640Sariff	.offset = {  0,  1,  4, -1,  2,  3, -1, -1,  5,			\
490193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
491193640Sariff}
492193640Sariff
493193640Sariff#define SND_CHN_MATRIX_MAP_6_1	{					\
494193640Sariff	.id = SND_CHN_MATRIX_6_1,					\
495193640Sariff	.channels = 7,							\
496193640Sariff	.ext = 1,							\
497193640Sariff	.map = {							\
498193640Sariff		/* Left */						\
499193640Sariff		[0] = {							\
500193640Sariff			.type = SND_CHN_T_FL,				\
501193640Sariff			.members =					\
502193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_SL	\
503193640Sariff		},							\
504193640Sariff		/* Right */						\
505193640Sariff		[1] = {							\
506193640Sariff			.type = SND_CHN_T_FR,				\
507193640Sariff			.members =					\
508193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_SR	\
509193640Sariff		},							\
510193640Sariff		/* Rear Left */						\
511193640Sariff		[2] = {							\
512193640Sariff			.type = SND_CHN_T_BL,				\
513193640Sariff			.members =					\
514193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_SL	\
515193640Sariff		},							\
516193640Sariff		/* Rear Right */					\
517193640Sariff		[3] = {							\
518193640Sariff			.type = SND_CHN_T_BR,				\
519193640Sariff			.members =					\
520193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_SR	\
521193640Sariff		},							\
522193640Sariff		/* Center */						\
523193640Sariff		[4] = {							\
524193640Sariff			.type = SND_CHN_T_FC,				\
525193640Sariff			.members = SND_CHN_T_MASK_FC			\
526193640Sariff		},							\
527193640Sariff		/* LFE */						\
528193640Sariff		[5] = {							\
529193640Sariff			.type = SND_CHN_T_LF,				\
530193640Sariff			.members = SND_CHN_T_MASK_LF			\
531193640Sariff		},							\
532193640Sariff		/* Rear Center */					\
533193640Sariff		[6] = {							\
534193640Sariff			.type = SND_CHN_T_BC,				\
535193640Sariff			.members = SND_CHN_T_MASK_BC			\
536193640Sariff		},							\
537193640Sariff		[7] = {							\
538193640Sariff			.type = SND_CHN_T_MAX,				\
539193640Sariff			.members = 0					\
540193640Sariff		}							\
541193640Sariff	},								\
542193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
543193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
544193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |			\
545193640Sariff		SND_CHN_T_MASK_BC,					\
546193640Sariff	.offset = {  0,  1,  4,  5,  2,  3, -1, -1,  6,			\
547193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
548193640Sariff}
549193640Sariff
550243138Smav#define SND_CHN_MATRIX_MAP_7_0	{					\
551243138Smav	.id = SND_CHN_MATRIX_7_0,					\
552243138Smav	.channels = 7,							\
553243138Smav	.ext = 0,							\
554243138Smav	.map = {							\
555243138Smav		/* Left */						\
556243138Smav		[0] = {							\
557243138Smav			.type = SND_CHN_T_FL,				\
558243138Smav			.members =					\
559243138Smav			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF	\
560243138Smav		},							\
561243138Smav		/* Right */						\
562243138Smav		[1] = {							\
563243138Smav			.type = SND_CHN_T_FR,				\
564243138Smav			.members =					\
565243138Smav			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF	\
566243138Smav		},							\
567243138Smav		/* Rear Left */						\
568243138Smav		[2] = {							\
569243138Smav			.type = SND_CHN_T_BL,				\
570243138Smav			.members =					\
571243138Smav			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |	\
572243138Smav			    SND_CHN_T_MASK_LF				\
573243138Smav		},							\
574243138Smav		/* Rear Right */					\
575243138Smav		[3] = {							\
576243138Smav			.type = SND_CHN_T_BR,				\
577243138Smav			.members =					\
578243138Smav			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
579243138Smav			    SND_CHN_T_MASK_LF				\
580243138Smav		},							\
581243138Smav		/* Center */						\
582243138Smav		[4] = {							\
583243138Smav			.type = SND_CHN_T_FC,				\
584243138Smav			.members =					\
585243138Smav			    SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF	\
586243138Smav		},							\
587243138Smav		/* Side Left */						\
588243138Smav		[5] = {							\
589243138Smav			.type = SND_CHN_T_SL,				\
590243138Smav			.members =					\
591243138Smav			    SND_CHN_T_MASK_SL | SND_CHN_T_MASK_LF	\
592243138Smav		},							\
593243138Smav		/* Side Right */					\
594243138Smav		[6] = {							\
595243138Smav			.type = SND_CHN_T_SR,				\
596243138Smav			.members =					\
597243138Smav			    SND_CHN_T_MASK_SR | SND_CHN_T_MASK_LF	\
598243138Smav		},							\
599243138Smav		[7] = {							\
600243138Smav			.type = SND_CHN_T_MAX,				\
601243138Smav			.members = 0					\
602243138Smav		}							\
603243138Smav	},								\
604243138Smav	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
605243138Smav		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
606243138Smav		SND_CHN_T_MASK_FC |					\
607243138Smav		SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR,			\
608243138Smav	.offset = {  0,  1,  4, -1,  2,  3, -1, -1, -1,			\
609243138Smav		     5,  6, -1, -1, -1, -1, -1, -1, -1  }		\
610243138Smav}
611243138Smav
612193640Sariff#define SND_CHN_MATRIX_MAP_7_1	{					\
613193640Sariff	.id = SND_CHN_MATRIX_7_1,					\
614193640Sariff	.channels = 8,							\
615193640Sariff	.ext = 1,							\
616193640Sariff	.map = {							\
617193640Sariff		/* Left */						\
618193640Sariff		[0] = {							\
619193640Sariff			.type = SND_CHN_T_FL,				\
620193640Sariff			.members = SND_CHN_T_MASK_FL			\
621193640Sariff		},							\
622193640Sariff		/* Right */						\
623193640Sariff		[1] = {							\
624193640Sariff			.type = SND_CHN_T_FR,				\
625193640Sariff			.members = SND_CHN_T_MASK_FR			\
626193640Sariff		},							\
627193640Sariff		/* Rear Left */						\
628193640Sariff		[2] = {							\
629193640Sariff			.type = SND_CHN_T_BL,				\
630193640Sariff			.members =					\
631193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC	\
632193640Sariff		},							\
633193640Sariff		/* Rear Right */					\
634193640Sariff		[3] = {							\
635193640Sariff			.type = SND_CHN_T_BR,				\
636193640Sariff			.members =					\
637193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC	\
638193640Sariff		},							\
639193640Sariff		/* Center */						\
640193640Sariff		[4] = {							\
641193640Sariff			.type = SND_CHN_T_FC,				\
642193640Sariff			.members = SND_CHN_T_MASK_FC			\
643193640Sariff		},							\
644193640Sariff		/* LFE */						\
645193640Sariff		[5] = {							\
646193640Sariff			.type = SND_CHN_T_LF,				\
647193640Sariff			.members = SND_CHN_T_MASK_LF			\
648193640Sariff		},							\
649193640Sariff		/* Side Left */						\
650193640Sariff		[6] = {							\
651193640Sariff			.type = SND_CHN_T_SL,				\
652193640Sariff			.members = SND_CHN_T_MASK_SL			\
653193640Sariff		},							\
654193640Sariff		/* Side Right */					\
655193640Sariff		[7] = {							\
656193640Sariff			.type = SND_CHN_T_SR,				\
657193640Sariff			.members = SND_CHN_T_MASK_SR			\
658193640Sariff		},							\
659193640Sariff		[8] = {							\
660193640Sariff			.type = SND_CHN_T_MAX,				\
661193640Sariff			.members = 0					\
662193640Sariff		}							\
663193640Sariff	},								\
664193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
665193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
666193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |			\
667193640Sariff		SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR,			\
668193640Sariff	.offset = {  0,  1,  4,  5,  2,  3, -1, -1, -1,			\
669193640Sariff		     6,  7, -1, -1, -1, -1, -1, -1, -1  }		\
670193640Sariff}
671193640Sariff
672193640Sariff#endif	/* !_SND_MATRIX_MAP_H_ */
673