xref: /haiku/src/add-ons/media/media-add-ons/mixer/Resampler.h (revision a9cf57cff5dfe040f74a96705d98d6711b6b1b50)
1*a9cf57cfSAxel Dörfler /*
2*a9cf57cfSAxel Dörfler  * Copyright 2003 Marcus Overhagen
3*a9cf57cfSAxel Dörfler  * Distributed under the terms of the MIT License.
4575526ffSbeveloper  */
549705454SStephan Aßmus #ifndef _RESAMPLER_H
649705454SStephan Aßmus #define _RESAMPLER_H
749705454SStephan Aßmus 
8*a9cf57cfSAxel Dörfler 
949705454SStephan Aßmus #include <SupportDefs.h>
1049705454SStephan Aßmus 
11575526ffSbeveloper 
12*a9cf57cfSAxel Dörfler class Resampler {
13575526ffSbeveloper public:
14*a9cf57cfSAxel Dörfler 								Resampler(uint32 sourceFormat,
15*a9cf57cfSAxel Dörfler 									uint32 destFormat);
16575526ffSbeveloper 	virtual						~Resampler();
17575526ffSbeveloper 
18*a9cf57cfSAxel Dörfler 			status_t			InitCheck() const;
19575526ffSbeveloper 
20*a9cf57cfSAxel Dörfler 			void				Resample(const void* src, int32 srcSampleOffset,
21*a9cf57cfSAxel Dörfler 									int32 srcSampleCount, void* dest,
22*a9cf57cfSAxel Dörfler 									int32 destSampleOffset,
23*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
24575526ffSbeveloper 
25575526ffSbeveloper protected:
26*a9cf57cfSAxel Dörfler 	virtual	void				float_to_float(const void* src,
27*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
28*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
29*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
30*a9cf57cfSAxel Dörfler 	virtual void				int32_to_float(const void* src,
31*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
32*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
33*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
34*a9cf57cfSAxel Dörfler 	virtual void				int16_to_float(const void* src,
35*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
36*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
37*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
38*a9cf57cfSAxel Dörfler 	virtual void				int8_to_float(const void* src,
39*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
40*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
41*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
42*a9cf57cfSAxel Dörfler 	virtual void				uint8_to_float(const void* src,
43*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
44*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
45*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
46*a9cf57cfSAxel Dörfler 	virtual void				float_to_int32(const void* src,
47*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
48*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
49*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
50*a9cf57cfSAxel Dörfler 	virtual void				float_to_int16(const void* src,
51*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
52*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
53*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
54*a9cf57cfSAxel Dörfler 	virtual void				float_to_int8(const void* src,
55*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
56*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
57*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
58*a9cf57cfSAxel Dörfler 	virtual void				float_to_uint8(const void* src,
59*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
60*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
61*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
62*a9cf57cfSAxel Dörfler 
63575526ffSbeveloper private:
64*a9cf57cfSAxel Dörfler 			void				(Resampler::*fFunc)(const void* src,
65*a9cf57cfSAxel Dörfler 									int32 srcSampleOffset, int32 srcSampleCount,
66*a9cf57cfSAxel Dörfler 									void* dest, int32 destSampleOffset,
67*a9cf57cfSAxel Dörfler 									int32 destSampleCount, float gain);
68575526ffSbeveloper };
69575526ffSbeveloper 
70575526ffSbeveloper 
71575526ffSbeveloper inline void
72*a9cf57cfSAxel Dörfler Resampler::Resample(const void *src, int32 srcSampleOffset,
73*a9cf57cfSAxel Dörfler 	int32 srcSampleCount, void *dest, int32 destSampleOffset,
74*a9cf57cfSAxel Dörfler 	int32 destSampleCount, float gain)
75575526ffSbeveloper {
76*a9cf57cfSAxel Dörfler 	(this->*fFunc)(src, srcSampleOffset, srcSampleCount, dest, destSampleOffset,
77*a9cf57cfSAxel Dörfler 		destSampleCount, gain);
78575526ffSbeveloper }
79575526ffSbeveloper 
8049705454SStephan Aßmus #endif // _RESAMPLER_H
81