xref: /haiku/src/add-ons/media/media-add-ons/multi_audio/Resampler.cpp (revision 7633665c77393a53662ec622b966cd5c684995e5)
1ea81d6eaSJerome Leveque /*
2ea81d6eaSJerome Leveque  * Copyright 2012 Jérôme Leveque
3ea81d6eaSJerome Leveque  * Copyright 2012 Jérôme Duval
4ea81d6eaSJerome Leveque  * Copyright 2003 Marcus Overhagen
5ea81d6eaSJerome Leveque  * Distributed under the terms of the MIT License.
6ea81d6eaSJerome Leveque  */
7ea81d6eaSJerome Leveque 
8ea81d6eaSJerome Leveque 
9ea81d6eaSJerome Leveque #include "Resampler.h"
10ea81d6eaSJerome Leveque #include "MultiAudioUtility.h"
11ea81d6eaSJerome Leveque #include "debug.h"
12ea81d6eaSJerome Leveque 
13ea81d6eaSJerome Leveque 
14ea81d6eaSJerome Leveque /*!	A simple resampling class for the multi_audio add-ons.
15ea81d6eaSJerome Leveque 	You pick the conversion function on object creation,
16ea81d6eaSJerome Leveque 	and then call the Resample() function, specifying data pointer,
17ea81d6eaSJerome Leveque 	offset (in bytes) to the next sample, and count of samples.
18ea81d6eaSJerome Leveque */
19ea81d6eaSJerome Leveque 
20ea81d6eaSJerome Leveque 
21ea81d6eaSJerome Leveque Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
22ea81d6eaSJerome Leveque 	:
23*7633665cSJerome Duval 	fFunc(&Resampler::_Void)
24ea81d6eaSJerome Leveque {
25ea81d6eaSJerome Leveque 	PRINT(("Resampler() in 0x%x, out 0x%x\n", (unsigned int)sourceFormat,
26ea81d6eaSJerome Leveque 		(unsigned int)destFormat));
27ea81d6eaSJerome Leveque 
28ea81d6eaSJerome Leveque 	switch (sourceFormat) {
29ea81d6eaSJerome Leveque 		case media_raw_audio_format::B_AUDIO_FLOAT:
30ea81d6eaSJerome Leveque 			switch (destFormat) {
31ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_FLOAT:
32*7633665cSJerome Duval 					fFunc = &Resampler::_CopyFloat2Float;
33ea81d6eaSJerome Leveque 					break;
34ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_DOUBLE:
35ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyFloat2Double;
36ea81d6eaSJerome Leveque 					break;
37ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_INT:
38ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyFloat2Int;
39ea81d6eaSJerome Leveque 					break;
40ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_SHORT:
41ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyFloat2Short;
42ea81d6eaSJerome Leveque 					break;
43ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_UCHAR:
44ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyFloat2UChar;
45ea81d6eaSJerome Leveque 					break;
46ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_CHAR:
47ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyFloat2Char;
48ea81d6eaSJerome Leveque 					break;
49ea81d6eaSJerome Leveque 			}
50ea81d6eaSJerome Leveque 			break;
51ea81d6eaSJerome Leveque 
52ea81d6eaSJerome Leveque 		case media_raw_audio_format::B_AUDIO_DOUBLE:
53ea81d6eaSJerome Leveque 			switch (destFormat) {
54ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_FLOAT:
55ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyDouble2Float;
56ea81d6eaSJerome Leveque 					break;
57ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_DOUBLE:
58*7633665cSJerome Duval 					fFunc = &Resampler::_CopyDouble2Double;
59ea81d6eaSJerome Leveque 					break;
60ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_INT:
61ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyDouble2Int;
62ea81d6eaSJerome Leveque 					break;
63ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_SHORT:
64ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyDouble2Short;
65ea81d6eaSJerome Leveque 					break;
66ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_UCHAR:
67ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyDouble2UChar;
68ea81d6eaSJerome Leveque 					break;
69ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_CHAR:
70ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyDouble2Char;
71ea81d6eaSJerome Leveque 					break;
72ea81d6eaSJerome Leveque 			}
73ea81d6eaSJerome Leveque 			break;
74ea81d6eaSJerome Leveque 
75ea81d6eaSJerome Leveque 		case media_raw_audio_format::B_AUDIO_INT:
76ea81d6eaSJerome Leveque 			switch (destFormat) {
77ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_FLOAT:
78ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyInt2Float;
79ea81d6eaSJerome Leveque 					break;
80ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_DOUBLE:
81ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyInt2Double;
82ea81d6eaSJerome Leveque 					break;
83ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_INT:
84*7633665cSJerome Duval 					fFunc = &Resampler::_CopyInt2Int;
85ea81d6eaSJerome Leveque 					break;
86ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_SHORT:
87ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyInt2Short;
88ea81d6eaSJerome Leveque 					break;
89ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_UCHAR:
90ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyInt2UChar;
91ea81d6eaSJerome Leveque 					break;
92ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_CHAR:
93ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyInt2Char;
94ea81d6eaSJerome Leveque 					break;
95ea81d6eaSJerome Leveque 			}
96ea81d6eaSJerome Leveque 			break;
97ea81d6eaSJerome Leveque 
98ea81d6eaSJerome Leveque 		case media_raw_audio_format::B_AUDIO_SHORT:
99ea81d6eaSJerome Leveque 			switch (destFormat) {
100ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_FLOAT:
101ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyShort2Float;
102ea81d6eaSJerome Leveque 					break;
103ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_DOUBLE:
104ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyShort2Double;
105ea81d6eaSJerome Leveque 					break;
106ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_INT:
107ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyShort2Int;
108ea81d6eaSJerome Leveque 					break;
109ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_SHORT:
110*7633665cSJerome Duval 					fFunc = &Resampler::_CopyShort2Short;
111ea81d6eaSJerome Leveque 					break;
112ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_UCHAR:
113ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyShort2UChar;
114ea81d6eaSJerome Leveque 					break;
115ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_CHAR:
116ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyShort2Char;
117ea81d6eaSJerome Leveque 					break;
118ea81d6eaSJerome Leveque 			}
119ea81d6eaSJerome Leveque 			break;
120ea81d6eaSJerome Leveque 
121ea81d6eaSJerome Leveque 		case media_raw_audio_format::B_AUDIO_UCHAR:
122ea81d6eaSJerome Leveque 			switch (destFormat) {
123ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_FLOAT:
124ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyUChar2Float;
125ea81d6eaSJerome Leveque 					break;
126ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_DOUBLE:
127ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyUChar2Double;
128ea81d6eaSJerome Leveque 					break;
129ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_INT:
130ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyUChar2Int;
131ea81d6eaSJerome Leveque 					break;
132ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_SHORT:
133ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyUChar2Short;
134ea81d6eaSJerome Leveque 					break;
135ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_UCHAR:
136*7633665cSJerome Duval 					fFunc = &Resampler::_CopyUChar2UChar;
137ea81d6eaSJerome Leveque 					break;
138ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_CHAR:
139ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyUChar2Char;
140ea81d6eaSJerome Leveque 					break;
141ea81d6eaSJerome Leveque 			}
142ea81d6eaSJerome Leveque 			break;
143ea81d6eaSJerome Leveque 
144ea81d6eaSJerome Leveque 		case media_raw_audio_format::B_AUDIO_CHAR:
145ea81d6eaSJerome Leveque 			switch (destFormat) {
146ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_FLOAT:
147ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyChar2Float;
148ea81d6eaSJerome Leveque 					break;
149ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_DOUBLE:
150ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyChar2Double;
151ea81d6eaSJerome Leveque 					break;
152ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_INT:
153ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyChar2Int;
154ea81d6eaSJerome Leveque 					break;
155ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_SHORT:
156ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyChar2Short;
157ea81d6eaSJerome Leveque 					break;
158ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_UCHAR:
159ea81d6eaSJerome Leveque 					fFunc = &Resampler::_CopyChar2UChar;
160ea81d6eaSJerome Leveque 					break;
161ea81d6eaSJerome Leveque 				case media_raw_audio_format::B_AUDIO_CHAR:
162*7633665cSJerome Duval 					fFunc = &Resampler::_CopyChar2Char;
163ea81d6eaSJerome Leveque 					break;
164ea81d6eaSJerome Leveque 			}
165ea81d6eaSJerome Leveque 			break;
166ea81d6eaSJerome Leveque 	}
167ea81d6eaSJerome Leveque }
168ea81d6eaSJerome Leveque 
169ea81d6eaSJerome Leveque 
170ea81d6eaSJerome Leveque Resampler::~Resampler()
171ea81d6eaSJerome Leveque {
172ea81d6eaSJerome Leveque }
173ea81d6eaSJerome Leveque 
174ea81d6eaSJerome Leveque 
175*7633665cSJerome Duval void
176*7633665cSJerome Duval Resampler::_Void(const void *inputData, uint32 inputStride,
177*7633665cSJerome Duval 	void *outputData, uint32 outputStride, uint32 sampleCount)
178ea81d6eaSJerome Leveque {
179*7633665cSJerome Duval 
180ea81d6eaSJerome Leveque }
181ea81d6eaSJerome Leveque 
182ea81d6eaSJerome Leveque 
183ea81d6eaSJerome Leveque void
184*7633665cSJerome Duval Resampler::_CopyFloat2Float(const void *inputData, uint32 inputStride,
185ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
186ea81d6eaSJerome Leveque {
187ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
188*7633665cSJerome Duval 		*(float*)outputData = *(const float*)inputData;
189ea81d6eaSJerome Leveque 
190ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
191ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
192ea81d6eaSJerome Leveque 
193ea81d6eaSJerome Leveque 		sampleCount--;
194ea81d6eaSJerome Leveque 	}
195ea81d6eaSJerome Leveque }
196ea81d6eaSJerome Leveque 
197ea81d6eaSJerome Leveque 
198ea81d6eaSJerome Leveque void
199ea81d6eaSJerome Leveque Resampler::_CopyFloat2Double(const void *inputData, uint32 inputStride,
200ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
201ea81d6eaSJerome Leveque {
202ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
203ea81d6eaSJerome Leveque 		*(double*)outputData = *(const float*)inputData;
204ea81d6eaSJerome Leveque 
205ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
206ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
207ea81d6eaSJerome Leveque 
208ea81d6eaSJerome Leveque 		sampleCount--;
209ea81d6eaSJerome Leveque 	}
210ea81d6eaSJerome Leveque }
211ea81d6eaSJerome Leveque 
212ea81d6eaSJerome Leveque 
213ea81d6eaSJerome Leveque void
214ea81d6eaSJerome Leveque Resampler::_CopyFloat2Int(const void *inputData, uint32 inputStride,
215ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
216ea81d6eaSJerome Leveque {
217ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
218ea81d6eaSJerome Leveque 		*(int32*)outputData = (int32)(*(const float*)inputData * 2147483647.0f);
219ea81d6eaSJerome Leveque 
220ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
221ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
222ea81d6eaSJerome Leveque 
223ea81d6eaSJerome Leveque 		sampleCount--;
224ea81d6eaSJerome Leveque 	}
225ea81d6eaSJerome Leveque }
226ea81d6eaSJerome Leveque 
227ea81d6eaSJerome Leveque void
228ea81d6eaSJerome Leveque Resampler::_CopyFloat2Short(const void *inputData, uint32 inputStride,
229ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
230ea81d6eaSJerome Leveque {
231ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
232ea81d6eaSJerome Leveque 		*(int16*)outputData = (int16)(*(const float*)inputData * 32767.0f);
233ea81d6eaSJerome Leveque 
234ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
235ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
236ea81d6eaSJerome Leveque 
237ea81d6eaSJerome Leveque 		sampleCount--;
238ea81d6eaSJerome Leveque 	}
239ea81d6eaSJerome Leveque }
240ea81d6eaSJerome Leveque 
241ea81d6eaSJerome Leveque 
242ea81d6eaSJerome Leveque void
243ea81d6eaSJerome Leveque Resampler::_CopyFloat2UChar(const void *inputData, uint32 inputStride,
244ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
245ea81d6eaSJerome Leveque {
246ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
247ea81d6eaSJerome Leveque 		*(uint8*)outputData = (uint8)(128.0f + *(const float*)inputData * 127.0f);
248ea81d6eaSJerome Leveque 
249ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
250ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
251ea81d6eaSJerome Leveque 
252ea81d6eaSJerome Leveque 		sampleCount--;
253ea81d6eaSJerome Leveque 	}
254ea81d6eaSJerome Leveque }
255ea81d6eaSJerome Leveque 
256ea81d6eaSJerome Leveque 
257ea81d6eaSJerome Leveque void
258ea81d6eaSJerome Leveque Resampler::_CopyFloat2Char(const void *inputData, uint32 inputStride,
259ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
260ea81d6eaSJerome Leveque {
261ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
262ea81d6eaSJerome Leveque 		*(int8*)outputData = (int8)(*(const float*)inputData * 127.0f);
263ea81d6eaSJerome Leveque 
264ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
265ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
266ea81d6eaSJerome Leveque 
267ea81d6eaSJerome Leveque 		sampleCount--;
268ea81d6eaSJerome Leveque 	}
269ea81d6eaSJerome Leveque }
270ea81d6eaSJerome Leveque 
271ea81d6eaSJerome Leveque 
272ea81d6eaSJerome Leveque void
273ea81d6eaSJerome Leveque Resampler::_CopyDouble2Float(const void *inputData, uint32 inputStride,
274ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
275ea81d6eaSJerome Leveque {
276ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
277ea81d6eaSJerome Leveque 		*(float*)outputData = *(const double*)inputData;
278ea81d6eaSJerome Leveque 
279ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
280ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
281ea81d6eaSJerome Leveque 
282ea81d6eaSJerome Leveque 		sampleCount--;
283ea81d6eaSJerome Leveque 	}
284ea81d6eaSJerome Leveque }
285ea81d6eaSJerome Leveque 
286ea81d6eaSJerome Leveque 
287ea81d6eaSJerome Leveque void
288*7633665cSJerome Duval Resampler::_CopyDouble2Double(const void *inputData, uint32 inputStride,
289*7633665cSJerome Duval 	void *outputData, uint32 outputStride, uint32 sampleCount)
290*7633665cSJerome Duval {
291*7633665cSJerome Duval 	while (sampleCount > 0) {
292*7633665cSJerome Duval 		*(double*)outputData = *(const double*)inputData;
293*7633665cSJerome Duval 
294*7633665cSJerome Duval 		outputData = (void*)((uint8*)outputData + outputStride);
295*7633665cSJerome Duval 		inputData = (void*)((uint8*)inputData + inputStride);
296*7633665cSJerome Duval 
297*7633665cSJerome Duval 		sampleCount--;
298*7633665cSJerome Duval 	}
299*7633665cSJerome Duval }
300*7633665cSJerome Duval 
301*7633665cSJerome Duval 
302*7633665cSJerome Duval void
303ea81d6eaSJerome Leveque Resampler::_CopyDouble2Int(const void *inputData, uint32 inputStride,
304ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
305ea81d6eaSJerome Leveque {
306ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
307ea81d6eaSJerome Leveque 		*(int32*)outputData = (int32)(*(const double*)inputData * 2147483647.0f);
308ea81d6eaSJerome Leveque 
309ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
310ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
311ea81d6eaSJerome Leveque 
312ea81d6eaSJerome Leveque 		sampleCount--;
313ea81d6eaSJerome Leveque 	}
314ea81d6eaSJerome Leveque }
315ea81d6eaSJerome Leveque 
316ea81d6eaSJerome Leveque 
317ea81d6eaSJerome Leveque void
318ea81d6eaSJerome Leveque Resampler::_CopyDouble2Short(const void *inputData, uint32 inputStride,
319ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
320ea81d6eaSJerome Leveque {
321ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
322ea81d6eaSJerome Leveque 		*(int16*)outputData = (int16)(*(const double*)inputData * 32767.0f);
323ea81d6eaSJerome Leveque 
324ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
325ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
326ea81d6eaSJerome Leveque 
327ea81d6eaSJerome Leveque 		sampleCount--;
328ea81d6eaSJerome Leveque 	}
329ea81d6eaSJerome Leveque }
330ea81d6eaSJerome Leveque 
331ea81d6eaSJerome Leveque 
332ea81d6eaSJerome Leveque void
333ea81d6eaSJerome Leveque Resampler::_CopyDouble2UChar(const void *inputData, uint32 inputStride,
334ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
335ea81d6eaSJerome Leveque {
336ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
337ea81d6eaSJerome Leveque 		*(uint8*)outputData = (uint8)(128.0f + *(const double*)inputData * 127.0f);
338ea81d6eaSJerome Leveque 
339ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
340ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
341ea81d6eaSJerome Leveque 
342ea81d6eaSJerome Leveque 		sampleCount--;
343ea81d6eaSJerome Leveque 	}
344ea81d6eaSJerome Leveque }
345ea81d6eaSJerome Leveque 
346ea81d6eaSJerome Leveque 
347ea81d6eaSJerome Leveque void
348ea81d6eaSJerome Leveque Resampler::_CopyDouble2Char(const void *inputData, uint32 inputStride,
349ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
350ea81d6eaSJerome Leveque {
351ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
352ea81d6eaSJerome Leveque 		*(int8*)outputData = (int8)(*(const double*)inputData * 127.0f);
353ea81d6eaSJerome Leveque 
354ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
355ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
356ea81d6eaSJerome Leveque 
357ea81d6eaSJerome Leveque 		sampleCount--;
358ea81d6eaSJerome Leveque 	}
359ea81d6eaSJerome Leveque }
360ea81d6eaSJerome Leveque 
361ea81d6eaSJerome Leveque 
362ea81d6eaSJerome Leveque void
363ea81d6eaSJerome Leveque Resampler::_CopyShort2Float(const void *inputData, uint32 inputStride,
364ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
365ea81d6eaSJerome Leveque {
366ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
367ea81d6eaSJerome Leveque 		*(float*)outputData = *(const int16*)inputData / 32767.0f;
368ea81d6eaSJerome Leveque 
369ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
370ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
371ea81d6eaSJerome Leveque 
372ea81d6eaSJerome Leveque 		sampleCount--;
373ea81d6eaSJerome Leveque 	}
374ea81d6eaSJerome Leveque }
375ea81d6eaSJerome Leveque 
376ea81d6eaSJerome Leveque 
377ea81d6eaSJerome Leveque void
378ea81d6eaSJerome Leveque Resampler::_CopyShort2Double(const void *inputData, uint32 inputStride,
379ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
380ea81d6eaSJerome Leveque {
381ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
382ea81d6eaSJerome Leveque 		*(double*)outputData = *(const int16*)inputData / 32767.0;
383ea81d6eaSJerome Leveque 
384ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
385ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
386ea81d6eaSJerome Leveque 
387ea81d6eaSJerome Leveque 		sampleCount--;
388ea81d6eaSJerome Leveque 	}
389ea81d6eaSJerome Leveque }
390ea81d6eaSJerome Leveque 
391ea81d6eaSJerome Leveque 
392ea81d6eaSJerome Leveque void
393ea81d6eaSJerome Leveque Resampler::_CopyShort2Int(const void *inputData, uint32 inputStride,
394ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
395ea81d6eaSJerome Leveque {
396ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
397ea81d6eaSJerome Leveque 		*(int32*)outputData = (int32)*(const int16*)inputData << 16;
398ea81d6eaSJerome Leveque 
399ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
400ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
401ea81d6eaSJerome Leveque 
402ea81d6eaSJerome Leveque 		sampleCount--;
403ea81d6eaSJerome Leveque 	}
404ea81d6eaSJerome Leveque }
405ea81d6eaSJerome Leveque 
406ea81d6eaSJerome Leveque 
407ea81d6eaSJerome Leveque void
408*7633665cSJerome Duval Resampler::_CopyShort2Short(const void *inputData, uint32 inputStride,
409*7633665cSJerome Duval 	void *outputData, uint32 outputStride, uint32 sampleCount)
410*7633665cSJerome Duval {
411*7633665cSJerome Duval 	while (sampleCount > 0) {
412*7633665cSJerome Duval 		*(int16*)outputData = *(const int16*)inputData;
413*7633665cSJerome Duval 
414*7633665cSJerome Duval 		outputData = (void*)((uint8*)outputData + outputStride);
415*7633665cSJerome Duval 		inputData = (void*)((uint8*)inputData + inputStride);
416*7633665cSJerome Duval 
417*7633665cSJerome Duval 		sampleCount--;
418*7633665cSJerome Duval 	}
419*7633665cSJerome Duval }
420*7633665cSJerome Duval 
421*7633665cSJerome Duval 
422*7633665cSJerome Duval void
423ea81d6eaSJerome Leveque Resampler::_CopyShort2UChar(const void *inputData, uint32 inputStride,
424ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
425ea81d6eaSJerome Leveque {
426ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
427ea81d6eaSJerome Leveque 		*(uint8*)outputData = 128 + (*(const int16*)inputData >> 8);
428ea81d6eaSJerome Leveque 
429ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
430ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
431ea81d6eaSJerome Leveque 
432ea81d6eaSJerome Leveque 		sampleCount--;
433ea81d6eaSJerome Leveque 	}
434ea81d6eaSJerome Leveque }
435ea81d6eaSJerome Leveque 
436ea81d6eaSJerome Leveque 
437ea81d6eaSJerome Leveque void
438ea81d6eaSJerome Leveque Resampler::_CopyShort2Char(const void *inputData, uint32 inputStride,
439ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
440ea81d6eaSJerome Leveque {
441ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
442ea81d6eaSJerome Leveque 		*(int8*)outputData = *(const int16*)inputData >> 8;
443ea81d6eaSJerome Leveque 
444ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
445ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
446ea81d6eaSJerome Leveque 
447ea81d6eaSJerome Leveque 		sampleCount--;
448ea81d6eaSJerome Leveque 	}
449ea81d6eaSJerome Leveque }
450ea81d6eaSJerome Leveque 
451ea81d6eaSJerome Leveque 
452ea81d6eaSJerome Leveque void
453ea81d6eaSJerome Leveque Resampler::_CopyInt2Float(const void *inputData, uint32 inputStride,
454ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
455ea81d6eaSJerome Leveque {
456ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
457ea81d6eaSJerome Leveque 		*(float*)outputData = *(const int32*)inputData / 2147483647.0f;
458ea81d6eaSJerome Leveque 
459ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
460ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
461ea81d6eaSJerome Leveque 
462ea81d6eaSJerome Leveque 		sampleCount--;
463ea81d6eaSJerome Leveque 	}
464ea81d6eaSJerome Leveque }
465ea81d6eaSJerome Leveque 
466ea81d6eaSJerome Leveque 
467ea81d6eaSJerome Leveque void
468ea81d6eaSJerome Leveque Resampler::_CopyInt2Double(const void *inputData, uint32 inputStride,
469ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
470ea81d6eaSJerome Leveque {
471ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
472ea81d6eaSJerome Leveque 		*(double*)outputData = *(const int32*)inputData / 2147483647.0;
473ea81d6eaSJerome Leveque 
474ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
475ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
476ea81d6eaSJerome Leveque 
477ea81d6eaSJerome Leveque 		sampleCount--;
478ea81d6eaSJerome Leveque 	}
479ea81d6eaSJerome Leveque }
480ea81d6eaSJerome Leveque 
481ea81d6eaSJerome Leveque 
482ea81d6eaSJerome Leveque void
483*7633665cSJerome Duval Resampler::_CopyInt2Int(const void *inputData, uint32 inputStride,
484*7633665cSJerome Duval 	void *outputData, uint32 outputStride, uint32 sampleCount)
485*7633665cSJerome Duval {
486*7633665cSJerome Duval 	while (sampleCount > 0) {
487*7633665cSJerome Duval 		*(int32*)outputData = *(const int32*)inputData;
488*7633665cSJerome Duval 
489*7633665cSJerome Duval 		outputData = (void*)((uint8*)outputData + outputStride);
490*7633665cSJerome Duval 		inputData = (void*)((uint8*)inputData + inputStride);
491*7633665cSJerome Duval 
492*7633665cSJerome Duval 		sampleCount--;
493*7633665cSJerome Duval 	}
494*7633665cSJerome Duval }
495*7633665cSJerome Duval 
496*7633665cSJerome Duval 
497*7633665cSJerome Duval void
498ea81d6eaSJerome Leveque Resampler::_CopyInt2Short(const void *inputData, uint32 inputStride,
499ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
500ea81d6eaSJerome Leveque {
501ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
502ea81d6eaSJerome Leveque 		*(int16*)outputData = *(const int32*)inputData >> 16;
503ea81d6eaSJerome Leveque 
504ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
505ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
506ea81d6eaSJerome Leveque 
507ea81d6eaSJerome Leveque 		sampleCount--;
508ea81d6eaSJerome Leveque 	}
509ea81d6eaSJerome Leveque }
510ea81d6eaSJerome Leveque 
511ea81d6eaSJerome Leveque 
512ea81d6eaSJerome Leveque void
513ea81d6eaSJerome Leveque Resampler::_CopyInt2UChar(const void *inputData, uint32 inputStride,
514ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
515ea81d6eaSJerome Leveque {
516ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
517ea81d6eaSJerome Leveque 		*(uint8*)outputData = 128 + (*(const int32*)inputData >> 24);
518ea81d6eaSJerome Leveque 
519ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
520ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
521ea81d6eaSJerome Leveque 
522ea81d6eaSJerome Leveque 		sampleCount--;
523ea81d6eaSJerome Leveque 	}
524ea81d6eaSJerome Leveque }
525ea81d6eaSJerome Leveque 
526ea81d6eaSJerome Leveque 
527ea81d6eaSJerome Leveque void
528ea81d6eaSJerome Leveque Resampler::_CopyInt2Char(const void *inputData, uint32 inputStride,
529ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
530ea81d6eaSJerome Leveque {
531ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
532ea81d6eaSJerome Leveque 		*(uint8*)outputData = *(const int32*)inputData >> 24;
533ea81d6eaSJerome Leveque 
534ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
535ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
536ea81d6eaSJerome Leveque 
537ea81d6eaSJerome Leveque 		sampleCount--;
538ea81d6eaSJerome Leveque 	}
539ea81d6eaSJerome Leveque }
540ea81d6eaSJerome Leveque 
541ea81d6eaSJerome Leveque 
542ea81d6eaSJerome Leveque void
543ea81d6eaSJerome Leveque Resampler::_CopyUChar2Float(const void *inputData, uint32 inputStride,
544ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
545ea81d6eaSJerome Leveque {
546ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
547ea81d6eaSJerome Leveque 		*(float*)outputData = (*(const uint8*)inputData - 128) / 127.0f;
548ea81d6eaSJerome Leveque 
549ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
550ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
551ea81d6eaSJerome Leveque 
552ea81d6eaSJerome Leveque 		sampleCount--;
553ea81d6eaSJerome Leveque 	}
554ea81d6eaSJerome Leveque }
555ea81d6eaSJerome Leveque 
556ea81d6eaSJerome Leveque 
557ea81d6eaSJerome Leveque void
558ea81d6eaSJerome Leveque Resampler::_CopyUChar2Double(const void *inputData, uint32 inputStride,
559ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
560ea81d6eaSJerome Leveque {
561ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
562ea81d6eaSJerome Leveque 		*(double*)outputData = (*(const uint8*)inputData - 128) / 127.0;
563ea81d6eaSJerome Leveque 
564ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
565ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
566ea81d6eaSJerome Leveque 
567ea81d6eaSJerome Leveque 		sampleCount--;
568ea81d6eaSJerome Leveque 	}
569ea81d6eaSJerome Leveque }
570ea81d6eaSJerome Leveque 
571ea81d6eaSJerome Leveque 
572ea81d6eaSJerome Leveque void
573ea81d6eaSJerome Leveque Resampler::_CopyUChar2Short(const void *inputData, uint32 inputStride,
574ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
575ea81d6eaSJerome Leveque {
576ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
577ea81d6eaSJerome Leveque 		*(int16*)outputData = (int16)(*(const uint8*)inputData - 128) << 8;
578ea81d6eaSJerome Leveque 
579ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
580ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
581ea81d6eaSJerome Leveque 
582ea81d6eaSJerome Leveque 		sampleCount--;
583ea81d6eaSJerome Leveque 	}
584ea81d6eaSJerome Leveque }
585ea81d6eaSJerome Leveque 
586ea81d6eaSJerome Leveque 
587ea81d6eaSJerome Leveque void
588ea81d6eaSJerome Leveque Resampler::_CopyUChar2Int(const void *inputData, uint32 inputStride,
589ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
590ea81d6eaSJerome Leveque {
591ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
592ea81d6eaSJerome Leveque 		*(int32*)outputData = (int32)(*(const uint8*)inputData - 128) << 24;
593ea81d6eaSJerome Leveque 
594ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
595ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
596ea81d6eaSJerome Leveque 
597ea81d6eaSJerome Leveque 		sampleCount--;
598ea81d6eaSJerome Leveque 	}
599ea81d6eaSJerome Leveque }
600ea81d6eaSJerome Leveque 
601ea81d6eaSJerome Leveque 
602ea81d6eaSJerome Leveque void
603*7633665cSJerome Duval Resampler::_CopyUChar2UChar(const void *inputData, uint32 inputStride,
604*7633665cSJerome Duval 	void *outputData, uint32 outputStride, uint32 sampleCount)
605*7633665cSJerome Duval {
606*7633665cSJerome Duval 	while (sampleCount > 0) {
607*7633665cSJerome Duval 		*(uint8*)outputData = *(const uint8*)inputData;
608*7633665cSJerome Duval 
609*7633665cSJerome Duval 		outputData = (void*)((uint8*)outputData + outputStride);
610*7633665cSJerome Duval 		inputData = (void*)((uint8*)inputData + inputStride);
611*7633665cSJerome Duval 
612*7633665cSJerome Duval 		sampleCount--;
613*7633665cSJerome Duval 	}
614*7633665cSJerome Duval }
615*7633665cSJerome Duval 
616*7633665cSJerome Duval 
617*7633665cSJerome Duval void
618ea81d6eaSJerome Leveque Resampler::_CopyUChar2Char(const void *inputData, uint32 inputStride,
619ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
620ea81d6eaSJerome Leveque {
621ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
622ea81d6eaSJerome Leveque 		*(int8*)outputData = *(const uint8*)inputData - 128;
623ea81d6eaSJerome Leveque 
624ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
625ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
626ea81d6eaSJerome Leveque 
627ea81d6eaSJerome Leveque 		sampleCount--;
628ea81d6eaSJerome Leveque 	}
629ea81d6eaSJerome Leveque }
630ea81d6eaSJerome Leveque 
631ea81d6eaSJerome Leveque 
632ea81d6eaSJerome Leveque void
633ea81d6eaSJerome Leveque Resampler::_CopyChar2Float(const void *inputData, uint32 inputStride,
634ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
635ea81d6eaSJerome Leveque {
636ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
637ea81d6eaSJerome Leveque 		*(float*)outputData = *(const int8*)inputData / 127.0f;
638ea81d6eaSJerome Leveque 
639ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
640ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
641ea81d6eaSJerome Leveque 
642ea81d6eaSJerome Leveque 		sampleCount--;
643ea81d6eaSJerome Leveque 	}
644ea81d6eaSJerome Leveque }
645ea81d6eaSJerome Leveque 
646ea81d6eaSJerome Leveque 
647ea81d6eaSJerome Leveque void
648ea81d6eaSJerome Leveque Resampler::_CopyChar2Double(const void *inputData, uint32 inputStride,
649ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
650ea81d6eaSJerome Leveque {
651ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
652ea81d6eaSJerome Leveque 		*(double*)outputData = *(const int8*)inputData / 127.0;
653ea81d6eaSJerome Leveque 
654ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
655ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
656ea81d6eaSJerome Leveque 
657ea81d6eaSJerome Leveque 		sampleCount--;
658ea81d6eaSJerome Leveque 	}
659ea81d6eaSJerome Leveque }
660ea81d6eaSJerome Leveque 
661ea81d6eaSJerome Leveque 
662ea81d6eaSJerome Leveque void
663ea81d6eaSJerome Leveque Resampler::_CopyChar2Short(const void *inputData, uint32 inputStride,
664ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
665ea81d6eaSJerome Leveque {
666ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
667ea81d6eaSJerome Leveque 		*(int16*)outputData = ((int16)*(const int8*)inputData) << 8;
668ea81d6eaSJerome Leveque 
669ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
670ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
671ea81d6eaSJerome Leveque 
672ea81d6eaSJerome Leveque 		sampleCount--;
673ea81d6eaSJerome Leveque 	}
674ea81d6eaSJerome Leveque }
675ea81d6eaSJerome Leveque 
676ea81d6eaSJerome Leveque 
677ea81d6eaSJerome Leveque void
678ea81d6eaSJerome Leveque Resampler::_CopyChar2Int(const void *inputData, uint32 inputStride,
679ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
680ea81d6eaSJerome Leveque {
681ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
682ea81d6eaSJerome Leveque 		*(int32*)outputData = ((int16)*(const int8*)inputData) << 24;
683ea81d6eaSJerome Leveque 
684ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
685ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
686ea81d6eaSJerome Leveque 
687ea81d6eaSJerome Leveque 		sampleCount--;
688ea81d6eaSJerome Leveque 	}
689ea81d6eaSJerome Leveque }
690ea81d6eaSJerome Leveque 
691ea81d6eaSJerome Leveque 
692ea81d6eaSJerome Leveque void
693ea81d6eaSJerome Leveque Resampler::_CopyChar2UChar(const void *inputData, uint32 inputStride,
694ea81d6eaSJerome Leveque 	void *outputData, uint32 outputStride, uint32 sampleCount)
695ea81d6eaSJerome Leveque {
696ea81d6eaSJerome Leveque 	while (sampleCount > 0) {
697ea81d6eaSJerome Leveque 		*(uint8*)outputData = *(const int8*)inputData + 128;
698ea81d6eaSJerome Leveque 
699ea81d6eaSJerome Leveque 		outputData = (void*)((uint8*)outputData + outputStride);
700ea81d6eaSJerome Leveque 		inputData = (void*)((uint8*)inputData + inputStride);
701ea81d6eaSJerome Leveque 
702ea81d6eaSJerome Leveque 		sampleCount--;
703ea81d6eaSJerome Leveque 	}
704ea81d6eaSJerome Leveque }
705ea81d6eaSJerome Leveque 
706*7633665cSJerome Duval 
707*7633665cSJerome Duval void
708*7633665cSJerome Duval Resampler::_CopyChar2Char(const void *inputData, uint32 inputStride,
709*7633665cSJerome Duval 	void *outputData, uint32 outputStride, uint32 sampleCount)
710*7633665cSJerome Duval {
711*7633665cSJerome Duval 	while (sampleCount > 0) {
712*7633665cSJerome Duval 		*(int8*)outputData = *(const int8*)inputData;
713*7633665cSJerome Duval 
714*7633665cSJerome Duval 		outputData = (void*)((uint8*)outputData + outputStride);
715*7633665cSJerome Duval 		inputData = (void*)((uint8*)inputData + inputStride);
716*7633665cSJerome Duval 
717*7633665cSJerome Duval 		sampleCount--;
718*7633665cSJerome Duval 	}
719*7633665cSJerome Duval }
720*7633665cSJerome Duval 
721