Annotation of sys/dev/auconv.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: auconv.c,v 1.7 2007/07/17 08:35:33 jakemsr Exp $ */
2: /* $NetBSD: auconv.c,v 1.3 1999/11/01 18:12:19 augustss Exp $ */
3:
4: /*
5: * Copyright (c) 1996 The NetBSD Foundation, Inc.
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. All advertising materials mentioning features or use of this software
17: * must display the following acknowledgement:
18: * This product includes software developed by the Computer Systems
19: * Engineering Group at Lawrence Berkeley Laboratory.
20: * 4. Neither the name of the University nor of the Laboratory may be used
21: * to endorse or promote products derived from this software without
22: * specific prior written permission.
23: *
24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34: * SUCH DAMAGE.
35: *
36: */
37:
38: #include <sys/types.h>
39: #include <sys/audioio.h>
40: #include <dev/auconv.h>
41:
42: void
43: change_sign8(void *v, u_char *p, int cc)
44: {
45: while (--cc >= 0) {
46: *p ^= 0x80;
47: ++p;
48: }
49: }
50:
51: void
52: change_sign16_le(void *v, u_char *p, int cc)
53: {
54: while ((cc -= 2) >= 0) {
55: p[1] ^= 0x80;
56: p += 2;
57: }
58: }
59:
60: void
61: change_sign16_be(void *v, u_char *p, int cc)
62: {
63: while ((cc -= 2) >= 0) {
64: p[0] ^= 0x80;
65: p += 2;
66: }
67: }
68:
69: void
70: swap_bytes(void *v, u_char *p, int cc)
71: {
72: u_char t;
73:
74: while ((cc -= 2) >= 0) {
75: t = p[0];
76: p[0] = p[1];
77: p[1] = t;
78: p += 2;
79: }
80: }
81:
82: void
83: swap_bytes_change_sign16_le(void *v, u_char *p, int cc)
84: {
85: u_char t;
86:
87: while ((cc -= 2) >= 0) {
88: t = p[1];
89: p[1] = p[0] ^ 0x80;
90: p[0] = t;
91: p += 2;
92: }
93: }
94:
95: void
96: swap_bytes_change_sign16_be(void *v, u_char *p, int cc)
97: {
98: u_char t;
99:
100: while ((cc -= 2) >= 0) {
101: t = p[0];
102: p[0] = p[1] ^ 0x80;
103: p[1] = t;
104: p += 2;
105: }
106: }
107:
108: void
109: change_sign16_swap_bytes_le(void *v, u_char *p, int cc)
110: {
111: swap_bytes_change_sign16_be(v, p, cc);
112: }
113:
114: void
115: change_sign16_swap_bytes_be(void *v, u_char *p, int cc)
116: {
117: swap_bytes_change_sign16_le(v, p, cc);
118: }
119:
120: void
121: linear8_to_linear16_le(void *v, u_char *p, int cc)
122: {
123: u_char *q = p;
124:
125: p += cc;
126: q += cc * 2;
127: while (--cc >= 0) {
128: q -= 2;
129: q[1] = *--p;
130: q[0] = 0;
131: }
132: }
133:
134: void
135: linear8_to_linear16_be(void *v, u_char *p, int cc)
136: {
137: u_char *q = p;
138:
139: p += cc;
140: q += cc * 2;
141: while (--cc >= 0) {
142: q -= 2;
143: q[0] = *--p;
144: q[1] = 0;
145: }
146: }
147:
148: void
149: linear16_to_linear8_le(void *v, u_char *p, int cc)
150: {
151: u_char *q = p;
152:
153: while ((cc -= 2) >= 0) {
154: *q++ = p[1];
155: p += 2;
156: }
157: }
158:
159: void
160: linear16_to_linear8_be(void *v, u_char *p, int cc)
161: {
162: u_char *q = p;
163:
164: while ((cc -= 2) >= 0) {
165: *q++ = p[0];
166: p += 2;
167: }
168: }
169:
170: void
171: ulinear8_to_linear16_le(void *v, u_char *p, int cc)
172: {
173: u_char *q = p;
174:
175: p += cc;
176: q += cc * 2;
177: while (--cc >= 0) {
178: q -= 2;
179: q[1] = (*--p) ^ 0x80;
180: q[0] = 0;
181: }
182: }
183:
184: void
185: ulinear8_to_linear16_be(void *v, u_char *p, int cc)
186: {
187: u_char *q = p;
188:
189: p += cc;
190: q += cc * 2;
191: while (--cc >= 0) {
192: q -= 2;
193: q[0] = (*--p) ^ 0x80;
194: q[1] = 0;
195: }
196: }
197:
198: void
199: linear16_to_ulinear8_le(void *v, u_char *p, int cc)
200: {
201: u_char *q = p;
202:
203: while ((cc -= 2) >= 0) {
204: *q++ = p[1] ^ 0x80;
205: p += 2;
206: }
207: }
208:
209: void
210: linear16_to_ulinear8_be(void *v, u_char *p, int cc)
211: {
212: u_char *q = p;
213:
214: while ((cc -= 2) >= 0) {
215: *q++ = p[0] ^ 0x80;
216: p += 2;
217: }
218: }
219:
220: /*
221: * just expand mono to stereo, no other conversions
222: */
223: void
224: noswap_bytes_mts(void *v, u_char *p, int cc)
225: {
226: u_char *q = p;
227:
228: p += cc;
229: q += cc * 2;
230: while ((cc -= 2) >= 0) {
231: q -= 4;
232: q[1] = q[3] = *--p;
233: q[0] = q[2] = *--p;
234: }
235: }
236:
237: /*
238: * same as swap_bytes(), just expand mono to stereo
239: */
240: void
241: swap_bytes_mts(void *v, u_char *p, int cc)
242: {
243: u_char *q = p;
244:
245: p += cc;
246: q += cc * 2;
247: while ((cc -= 2) >= 0) {
248: q -= 4;
249: q[0] = q[2] = *--p;
250: q[1] = q[3] = *--p;
251: }
252: }
253:
254: /*
255: * same as linear8_to_linear16_le(), plus expand mono to stereo
256: */
257: void
258: linear8_to_linear16_le_mts(void *v, u_char *p, int cc)
259: {
260: u_char *q = p;
261:
262: p += cc;
263: q += cc * 4;
264: while (--cc >= 0) {
265: q -= 4;
266: q[1] = q[3] = *--p;
267: q[0] = q[2] = 0;
268: }
269: }
270:
271: /*
272: * same as linear8_to_linear16_be(), plus expand mono to stereo
273: */
274: void
275: linear8_to_linear16_be_mts(void *v, u_char *p, int cc)
276: {
277: u_char *q = p;
278:
279: p += cc;
280: q += cc * 4;
281: while (--cc >= 0) {
282: q -= 4;
283: q[0] = q[2] = *--p;
284: q[1] = q[3] = 0;
285: }
286: }
287:
288: /*
289: * same as ulinear8_to_linear16_le(), plus expand mono to stereo
290: */
291: void
292: ulinear8_to_linear16_le_mts(void *v, u_char *p, int cc)
293: {
294: u_char *q = p;
295:
296: p += cc;
297: q += cc * 4;
298: while (--cc >= 0) {
299: q -= 4;
300: q[1] = q[3] = (*--p) ^ 0x80;
301: q[0] = q[2] = 0;
302: }
303: }
304:
305: /*
306: * same as ulinear8_to_linear16_be(), plus expand mono to stereo
307: */
308: void
309: ulinear8_to_linear16_be_mts(void *v, u_char *p, int cc)
310: {
311: u_char *q = p;
312:
313: p += cc;
314: q += cc * 4;
315: while (--cc >= 0) {
316: q -= 4;
317: q[0] = q[2] = (*--p) ^ 0x80;
318: q[1] = q[3] = 0;
319: }
320: }
321:
322: /*
323: * same as change_sign16_le(), plus expand mono to stereo
324: */
325: void
326: change_sign16_le_mts(void *v, u_char *p, int cc)
327: {
328: u_char *q = p;
329:
330: p += cc;
331: q += cc * 2;
332: while ((cc -= 2) >= 0) {
333: q -= 4;
334: q[1] = q[3] = (*--p) ^ 0x80;
335: q[0] = q[2] = *--p;
336: }
337: }
338:
339: /*
340: * same as change_sign16_be(), plus expand mono to stereo
341: */
342: void
343: change_sign16_be_mts(void *v, u_char *p, int cc)
344: {
345: u_char *q = p;
346:
347: p += cc;
348: q += cc * 2;
349: while ((cc -= 2) >= 0) {
350: q -= 4;
351: q[0] = q[2] = (*--p) ^ 0x80;
352: q[1] = q[3] = *--p;
353: }
354: }
355:
356: /*
357: * same as change_sign16_swap_bytes_le(), plus expand mono to stereo
358: */
359: void
360: change_sign16_swap_bytes_le_mts(void *v, u_char *p, int cc)
361: {
362: change_sign16_be_mts(v, p, cc);
363: }
364:
365: /*
366: * same as change_sign16_swap_bytes_be(), plus expand mono to stereo
367: */
368: void
369: change_sign16_swap_bytes_be_mts(void *v, u_char *p, int cc)
370: {
371: change_sign16_le_mts(v, p, cc);
372: }
CVSweb