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$
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
198193640Sariff#define SND_CHN_MATRIX_MAP_4_0	{					\
199193640Sariff	.id = SND_CHN_MATRIX_4_0,					\
200193640Sariff	.channels = 4,							\
201193640Sariff	.ext = 0,							\
202193640Sariff	.map = {							\
203193640Sariff		/* Left */						\
204193640Sariff		[0] = {							\
205193640Sariff			.type = SND_CHN_T_FL,				\
206193640Sariff			.members =					\
207193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
208193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SL	\
209193640Sariff		},							\
210193640Sariff		/* Right */						\
211193640Sariff		[1] = {							\
212193640Sariff			.type = SND_CHN_T_FR,				\
213193640Sariff			.members =					\
214193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
215193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_SR	\
216193640Sariff		},							\
217193640Sariff		/* Rear Left */						\
218193640Sariff		[2] = {							\
219193640Sariff			.type = SND_CHN_T_BL,				\
220193640Sariff			.members =					\
221193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |	\
222193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL	\
223193640Sariff		},							\
224193640Sariff		/* Rear Right */					\
225193640Sariff		[3] = {							\
226193640Sariff			.type = SND_CHN_T_BR,				\
227193640Sariff			.members =					\
228193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |	\
229193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR	\
230193640Sariff		},							\
231193640Sariff		[4] = {							\
232193640Sariff			.type = SND_CHN_T_MAX,				\
233193640Sariff			.members = 0					\
234193640Sariff		}							\
235193640Sariff	},								\
236193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
237193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR,			\
238193640Sariff	.offset = {  0,  1, -1, -1,  2,  3, -1, -1, -1,			\
239193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
240193640Sariff}
241193640Sariff
242193640Sariff#define SND_CHN_MATRIX_MAP_4_1	{					\
243193640Sariff	.id = SND_CHN_MATRIX_4_1,					\
244193640Sariff	.channels = 5,							\
245193640Sariff	.ext = 1,							\
246193640Sariff	.map = {							\
247193640Sariff		/* Left */						\
248193640Sariff		[0] = {							\
249193640Sariff			.type = SND_CHN_T_FL,				\
250193640Sariff			.members =					\
251193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FC |	\
252193640Sariff			    SND_CHN_T_MASK_SL				\
253193640Sariff		},							\
254193640Sariff		/* Right */						\
255193640Sariff		[1] = {							\
256193640Sariff			.type = SND_CHN_T_FR,				\
257193640Sariff			.members =					\
258193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_FC |	\
259193640Sariff			    SND_CHN_T_MASK_SR				\
260193640Sariff		},							\
261193640Sariff		/* Rear Left */						\
262193640Sariff		[2] = {							\
263193640Sariff			.type = SND_CHN_T_BL,				\
264193640Sariff			.members =					\
265193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |	\
266193640Sariff			    SND_CHN_T_MASK_SL				\
267193640Sariff		},							\
268193640Sariff		/* Rear Right */					\
269193640Sariff		[3] = {							\
270193640Sariff			.type = SND_CHN_T_BR,				\
271193640Sariff			.members =					\
272193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
273193640Sariff			    SND_CHN_T_MASK_SR				\
274193640Sariff		},							\
275193640Sariff		/* LFE */						\
276193640Sariff		[4] = {							\
277193640Sariff			.type = SND_CHN_T_LF,				\
278193640Sariff			.members = SND_CHN_T_MASK_LF			\
279193640Sariff		},							\
280193640Sariff		[5] = {							\
281193640Sariff			.type = SND_CHN_T_MAX,				\
282193640Sariff			.members = 0					\
283193640Sariff		}							\
284193640Sariff	},								\
285193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
286193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
287193640Sariff		SND_CHN_T_MASK_LF,					\
288193640Sariff	.offset = {  0,  1, -1,  4,  2,  3, -1, -1, -1,			\
289193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
290193640Sariff}
291193640Sariff
292193640Sariff#define SND_CHN_MATRIX_MAP_5_0	{	/* 5 channels default */	\
293193640Sariff	.id = SND_CHN_MATRIX_5_0,					\
294193640Sariff	.channels = 5,							\
295193640Sariff	.ext = 0,							\
296193640Sariff	.map = {							\
297193640Sariff		/* Left */						\
298193640Sariff		[0] = {							\
299193640Sariff			.type = SND_CHN_T_FL,				\
300193640Sariff			.members =					\
301193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF |	\
302193640Sariff			    SND_CHN_T_MASK_SL				\
303193640Sariff		},							\
304193640Sariff		/* Right */						\
305193640Sariff		[1] = {							\
306193640Sariff			.type = SND_CHN_T_FR,				\
307193640Sariff			.members =					\
308193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF |	\
309193640Sariff			    SND_CHN_T_MASK_SR				\
310193640Sariff		},							\
311193640Sariff		/* Rear Left */						\
312193640Sariff		[2] = {							\
313193640Sariff			.type = SND_CHN_T_BL,				\
314193640Sariff			.members =					\
315193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BL |	\
316193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SL	\
317193640Sariff		},							\
318193640Sariff		/* Rear Right */					\
319193640Sariff		[3] = {							\
320193640Sariff			.type = SND_CHN_T_BR,				\
321193640Sariff			.members =					\
322193640Sariff			    SND_CHN_T_MASK_LF | SND_CHN_T_MASK_BR |	\
323193640Sariff			    SND_CHN_T_MASK_BC | SND_CHN_T_MASK_SR	\
324193640Sariff		},							\
325193640Sariff		/* Center */						\
326193640Sariff		[4] = {							\
327193640Sariff			.type = SND_CHN_T_FC,				\
328193640Sariff			.members = SND_CHN_T_MASK_FC			\
329193640Sariff		},							\
330193640Sariff		[5] = {							\
331193640Sariff			.type = SND_CHN_T_MAX,				\
332193640Sariff			.members = 0					\
333193640Sariff		}							\
334193640Sariff	},								\
335193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
336193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
337193640Sariff		SND_CHN_T_MASK_FC,					\
338193640Sariff	.offset = {  0,  1,  4, -1,  2,  3, -1, -1, -1,			\
339193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
340193640Sariff}
341193640Sariff
342193640Sariff#define SND_CHN_MATRIX_MAP_5_1	{	/* 6 channels default */	\
343193640Sariff	.id = SND_CHN_MATRIX_5_1,					\
344193640Sariff	.channels = 6,							\
345193640Sariff	.ext = 1,							\
346193640Sariff	.map = {							\
347193640Sariff		/* Left */						\
348193640Sariff		[0] = {							\
349193640Sariff			.type = SND_CHN_T_FL,				\
350193640Sariff			.members =					\
351193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_SL	\
352193640Sariff		},							\
353193640Sariff		/* Right */						\
354193640Sariff		[1] = {							\
355193640Sariff			.type = SND_CHN_T_FR,				\
356193640Sariff			.members =					\
357193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_SR	\
358193640Sariff		},							\
359193640Sariff		/* Rear Left */						\
360193640Sariff		[2] = {							\
361193640Sariff			.type = SND_CHN_T_BL,				\
362193640Sariff			.members =					\
363193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC |	\
364193640Sariff			    SND_CHN_T_MASK_SL				\
365193640Sariff		},							\
366193640Sariff		/* Rear Right */					\
367193640Sariff		[3] = {							\
368193640Sariff			.type = SND_CHN_T_BR,				\
369193640Sariff			.members =					\
370193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC |	\
371193640Sariff			    SND_CHN_T_MASK_SR				\
372193640Sariff		},							\
373193640Sariff		/* Center */						\
374193640Sariff		[4] = {							\
375193640Sariff			.type = SND_CHN_T_FC,				\
376193640Sariff			.members = SND_CHN_T_MASK_FC			\
377193640Sariff		},							\
378193640Sariff		/* LFE */						\
379193640Sariff		[5] = {							\
380193640Sariff			.type = SND_CHN_T_LF,				\
381193640Sariff			.members = SND_CHN_T_MASK_LF			\
382193640Sariff		},							\
383193640Sariff		[6] = {							\
384193640Sariff			.type = SND_CHN_T_MAX,				\
385193640Sariff			.members = 0					\
386193640Sariff		}							\
387193640Sariff	},								\
388193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
389193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
390193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF,			\
391193640Sariff	.offset = {  0,  1,  4,  5,  2,  3, -1, -1, -1,			\
392193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
393193640Sariff}
394193640Sariff
395193640Sariff#define SND_CHN_MATRIX_MAP_6_0	{					\
396193640Sariff	.id = SND_CHN_MATRIX_6_0,					\
397193640Sariff	.channels = 6,							\
398193640Sariff	.ext = 0,							\
399193640Sariff	.map  = {							\
400193640Sariff		/* Left */						\
401193640Sariff		[0] = {							\
402193640Sariff			.type = SND_CHN_T_FL,				\
403193640Sariff			.members =					\
404193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_LF |	\
405193640Sariff			    SND_CHN_T_MASK_SL				\
406193640Sariff		},							\
407193640Sariff		/* Right */						\
408193640Sariff		[1] = {							\
409193640Sariff			.type = SND_CHN_T_FR,				\
410193640Sariff			.members =					\
411193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_LF |	\
412193640Sariff			    SND_CHN_T_MASK_SR				\
413193640Sariff		},							\
414193640Sariff		/* Rear Left */						\
415193640Sariff		[2] = {							\
416193640Sariff			.type = SND_CHN_T_BL,				\
417193640Sariff			.members =					\
418193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_LF |	\
419193640Sariff			    SND_CHN_T_MASK_SL				\
420193640Sariff		},							\
421193640Sariff		/* Rear Right */					\
422193640Sariff		[3] = {							\
423193640Sariff			.type = SND_CHN_T_BR,				\
424193640Sariff			.members =					\
425193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_LF |	\
426193640Sariff			    SND_CHN_T_MASK_SR				\
427193640Sariff		},							\
428193640Sariff		/* Center */						\
429193640Sariff		[4] = {							\
430193640Sariff			.type = SND_CHN_T_FC,				\
431193640Sariff			.members = SND_CHN_T_MASK_FC			\
432193640Sariff		},							\
433193640Sariff		/* Rear Center */					\
434193640Sariff		[5] = {							\
435193640Sariff			.type = SND_CHN_T_BC,				\
436193640Sariff			.members = SND_CHN_T_MASK_BC			\
437193640Sariff		},							\
438193640Sariff		[6] = {							\
439193640Sariff			.type = SND_CHN_T_MAX,				\
440193640Sariff			.members = 0					\
441193640Sariff		}							\
442193640Sariff	},								\
443193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
444193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
445193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_BC,			\
446193640Sariff	.offset = {  0,  1,  4, -1,  2,  3, -1, -1,  5,			\
447193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
448193640Sariff}
449193640Sariff
450193640Sariff#define SND_CHN_MATRIX_MAP_6_1	{					\
451193640Sariff	.id = SND_CHN_MATRIX_6_1,					\
452193640Sariff	.channels = 7,							\
453193640Sariff	.ext = 1,							\
454193640Sariff	.map = {							\
455193640Sariff		/* Left */						\
456193640Sariff		[0] = {							\
457193640Sariff			.type = SND_CHN_T_FL,				\
458193640Sariff			.members =					\
459193640Sariff			    SND_CHN_T_MASK_FL | SND_CHN_T_MASK_SL	\
460193640Sariff		},							\
461193640Sariff		/* Right */						\
462193640Sariff		[1] = {							\
463193640Sariff			.type = SND_CHN_T_FR,				\
464193640Sariff			.members =					\
465193640Sariff			    SND_CHN_T_MASK_FR | SND_CHN_T_MASK_SR	\
466193640Sariff		},							\
467193640Sariff		/* Rear Left */						\
468193640Sariff		[2] = {							\
469193640Sariff			.type = SND_CHN_T_BL,				\
470193640Sariff			.members =					\
471193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_SL	\
472193640Sariff		},							\
473193640Sariff		/* Rear Right */					\
474193640Sariff		[3] = {							\
475193640Sariff			.type = SND_CHN_T_BR,				\
476193640Sariff			.members =					\
477193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_SR	\
478193640Sariff		},							\
479193640Sariff		/* Center */						\
480193640Sariff		[4] = {							\
481193640Sariff			.type = SND_CHN_T_FC,				\
482193640Sariff			.members = SND_CHN_T_MASK_FC			\
483193640Sariff		},							\
484193640Sariff		/* LFE */						\
485193640Sariff		[5] = {							\
486193640Sariff			.type = SND_CHN_T_LF,				\
487193640Sariff			.members = SND_CHN_T_MASK_LF			\
488193640Sariff		},							\
489193640Sariff		/* Rear Center */					\
490193640Sariff		[6] = {							\
491193640Sariff			.type = SND_CHN_T_BC,				\
492193640Sariff			.members = SND_CHN_T_MASK_BC			\
493193640Sariff		},							\
494193640Sariff		[7] = {							\
495193640Sariff			.type = SND_CHN_T_MAX,				\
496193640Sariff			.members = 0					\
497193640Sariff		}							\
498193640Sariff	},								\
499193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
500193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
501193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |			\
502193640Sariff		SND_CHN_T_MASK_BC,					\
503193640Sariff	.offset = {  0,  1,  4,  5,  2,  3, -1, -1,  6,			\
504193640Sariff		    -1, -1, -1, -1, -1, -1, -1, -1, -1  }		\
505193640Sariff}
506193640Sariff
507193640Sariff#define SND_CHN_MATRIX_MAP_7_1	{					\
508193640Sariff	.id = SND_CHN_MATRIX_7_1,					\
509193640Sariff	.channels = 8,							\
510193640Sariff	.ext = 1,							\
511193640Sariff	.map = {							\
512193640Sariff		/* Left */						\
513193640Sariff		[0] = {							\
514193640Sariff			.type = SND_CHN_T_FL,				\
515193640Sariff			.members = SND_CHN_T_MASK_FL			\
516193640Sariff		},							\
517193640Sariff		/* Right */						\
518193640Sariff		[1] = {							\
519193640Sariff			.type = SND_CHN_T_FR,				\
520193640Sariff			.members = SND_CHN_T_MASK_FR			\
521193640Sariff		},							\
522193640Sariff		/* Rear Left */						\
523193640Sariff		[2] = {							\
524193640Sariff			.type = SND_CHN_T_BL,				\
525193640Sariff			.members =					\
526193640Sariff			    SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BC	\
527193640Sariff		},							\
528193640Sariff		/* Rear Right */					\
529193640Sariff		[3] = {							\
530193640Sariff			.type = SND_CHN_T_BR,				\
531193640Sariff			.members =					\
532193640Sariff			    SND_CHN_T_MASK_BR | SND_CHN_T_MASK_BC	\
533193640Sariff		},							\
534193640Sariff		/* Center */						\
535193640Sariff		[4] = {							\
536193640Sariff			.type = SND_CHN_T_FC,				\
537193640Sariff			.members = SND_CHN_T_MASK_FC			\
538193640Sariff		},							\
539193640Sariff		/* LFE */						\
540193640Sariff		[5] = {							\
541193640Sariff			.type = SND_CHN_T_LF,				\
542193640Sariff			.members = SND_CHN_T_MASK_LF			\
543193640Sariff		},							\
544193640Sariff		/* Side Left */						\
545193640Sariff		[6] = {							\
546193640Sariff			.type = SND_CHN_T_SL,				\
547193640Sariff			.members = SND_CHN_T_MASK_SL			\
548193640Sariff		},							\
549193640Sariff		/* Side Right */					\
550193640Sariff		[7] = {							\
551193640Sariff			.type = SND_CHN_T_SR,				\
552193640Sariff			.members = SND_CHN_T_MASK_SR			\
553193640Sariff		},							\
554193640Sariff		[8] = {							\
555193640Sariff			.type = SND_CHN_T_MAX,				\
556193640Sariff			.members = 0					\
557193640Sariff		}							\
558193640Sariff	},								\
559193640Sariff	.mask = SND_CHN_T_MASK_FL | SND_CHN_T_MASK_FR |			\
560193640Sariff		SND_CHN_T_MASK_BL | SND_CHN_T_MASK_BR |			\
561193640Sariff		SND_CHN_T_MASK_FC | SND_CHN_T_MASK_LF |			\
562193640Sariff		SND_CHN_T_MASK_SL | SND_CHN_T_MASK_SR,			\
563193640Sariff	.offset = {  0,  1,  4,  5,  2,  3, -1, -1, -1,			\
564193640Sariff		     6,  7, -1, -1, -1, -1, -1, -1, -1  }		\
565193640Sariff}
566193640Sariff
567193640Sariff#endif	/* !_SND_MATRIX_MAP_H_ */
568