xref: /haiku/src/add-ons/media/media-add-ons/mixer/Resampler.h (revision 5e96d7d537fbec23bad4ae9b4c8e7b02e769f0c6)
1 /*
2  * Copyright 2003 Marcus Overhagen
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _RESAMPLER_H
6 #define _RESAMPLER_H
7 
8 
9 #include <SupportDefs.h>
10 
11 
12 class Resampler {
13 public:
14 								Resampler(uint32 sourceFormat,
15 									uint32 destFormat);
16 	virtual						~Resampler();
17 
18 			status_t			InitCheck() const;
19 
20 			void				Resample(const void* src, int32 srcSampleOffset,
21 									int32 srcSampleCount, void* dest,
22 									int32 destSampleOffset,
23 									int32 destSampleCount, float gain);
24 
25 protected:
26 	virtual	void				float_to_float(const void* src,
27 									int32 srcSampleOffset, int32 srcSampleCount,
28 									void* dest, int32 destSampleOffset,
29 									int32 destSampleCount, float gain);
30 	virtual void				int32_to_float(const void* src,
31 									int32 srcSampleOffset, int32 srcSampleCount,
32 									void* dest, int32 destSampleOffset,
33 									int32 destSampleCount, float gain);
34 	virtual void				int16_to_float(const void* src,
35 									int32 srcSampleOffset, int32 srcSampleCount,
36 									void* dest, int32 destSampleOffset,
37 									int32 destSampleCount, float gain);
38 	virtual void				int8_to_float(const void* src,
39 									int32 srcSampleOffset, int32 srcSampleCount,
40 									void* dest, int32 destSampleOffset,
41 									int32 destSampleCount, float gain);
42 	virtual void				uint8_to_float(const void* src,
43 									int32 srcSampleOffset, int32 srcSampleCount,
44 									void* dest, int32 destSampleOffset,
45 									int32 destSampleCount, float gain);
46 	virtual void				float_to_int32(const void* src,
47 									int32 srcSampleOffset, int32 srcSampleCount,
48 									void* dest, int32 destSampleOffset,
49 									int32 destSampleCount, float gain);
50 	virtual void				float_to_int16(const void* src,
51 									int32 srcSampleOffset, int32 srcSampleCount,
52 									void* dest, int32 destSampleOffset,
53 									int32 destSampleCount, float gain);
54 	virtual void				float_to_int8(const void* src,
55 									int32 srcSampleOffset, int32 srcSampleCount,
56 									void* dest, int32 destSampleOffset,
57 									int32 destSampleCount, float gain);
58 	virtual void				float_to_uint8(const void* src,
59 									int32 srcSampleOffset, int32 srcSampleCount,
60 									void* dest, int32 destSampleOffset,
61 									int32 destSampleCount, float gain);
62 
63 private:
64 			void				(Resampler::*fFunc)(const void* src,
65 									int32 srcSampleOffset, int32 srcSampleCount,
66 									void* dest, int32 destSampleOffset,
67 									int32 destSampleCount, float gain);
68 };
69 
70 
71 inline void
72 Resampler::Resample(const void *src, int32 srcSampleOffset,
73 	int32 srcSampleCount, void *dest, int32 destSampleOffset,
74 	int32 destSampleCount, float gain)
75 {
76 	(this->*fFunc)(src, srcSampleOffset, srcSampleCount, dest, destSampleOffset,
77 		destSampleCount, gain);
78 }
79 
80 #endif // _RESAMPLER_H
81