Free Electron
converter.h
1 #ifndef CONVERTER_H
2 #define CONVERTER_H
3 
4 #include "alMain.h"
5 #include "alu.h"
6 
7 #ifdef __cpluspluc
8 extern "C" {
9 #endif
10 
11 typedef struct SampleConverter {
12  enum DevFmtType mSrcType;
13  enum DevFmtType mDstType;
14  ALsizei mNumChannels;
15  ALsizei mSrcTypeSize;
16  ALsizei mDstTypeSize;
17 
18  ALint mSrcPrepCount;
19 
20  ALsizei mFracOffset;
21  ALsizei mIncrement;
22  InterpState mState;
23  ResamplerFunc mResample;
24 
25  alignas(16) ALfloat mSrcSamples[BUFFERSIZE];
26  alignas(16) ALfloat mDstSamples[BUFFERSIZE];
27 
28  struct {
29  alignas(16) ALfloat mPrevSamples[MAX_RESAMPLE_PADDING*2];
30  } Chan[];
31 } SampleConverter;
32 
33 SampleConverter *CreateSampleConverter(enum DevFmtType srcType, enum DevFmtType dstType, ALsizei numchans, ALsizei srcRate, ALsizei dstRate);
34 void DestroySampleConverter(SampleConverter **converter);
35 
36 ALsizei SampleConverterInput(SampleConverter *converter, const ALvoid **src, ALsizei *srcframes, ALvoid *dst, ALsizei dstframes);
37 ALsizei SampleConverterAvailableOut(SampleConverter *converter, ALsizei srcframes);
38 
39 
40 typedef struct ChannelConverter {
41  enum DevFmtType mSrcType;
42  enum DevFmtChannels mSrcChans;
43  enum DevFmtChannels mDstChans;
44 } ChannelConverter;
45 
46 ChannelConverter *CreateChannelConverter(enum DevFmtType srcType, enum DevFmtChannels srcChans, enum DevFmtChannels dstChans);
47 void DestroyChannelConverter(ChannelConverter **converter);
48 
49 void ChannelConverterInput(ChannelConverter *converter, const ALvoid *src, ALfloat *dst, ALsizei frames);
50 
51 #ifdef __cpluspluc
52 }
53 #endif
54 
55 #endif /* CONVERTER_H */