10 struct SampleConverter
{
11 DevFmtType mSrcType
{};
12 DevFmtType mDstType
{};
13 ALsizei mNumChannels
{};
14 ALsizei mSrcTypeSize
{};
15 ALsizei mDstTypeSize
{};
17 ALint mSrcPrepCount
{};
19 ALsizei mFracOffset
{};
22 ResamplerFunc mResample
{};
24 alignas(16) ALfloat mSrcSamples
[BUFFERSIZE
]{};
25 alignas(16) ALfloat mDstSamples
[BUFFERSIZE
]{};
28 alignas(16) ALfloat PrevSamples
[MAX_RESAMPLE_PADDING
*2];
31 ALsizei
convert(const ALvoid
**src
, ALsizei
*srcframes
, ALvoid
*dst
, ALsizei dstframes
);
32 ALsizei
availableOut(ALsizei srcframes
) const;
36 using SampleConverterPtr
= std::unique_ptr
<SampleConverter
>;
38 SampleConverterPtr
CreateSampleConverter(DevFmtType srcType
, DevFmtType dstType
, ALsizei numchans
,
39 ALsizei srcRate
, ALsizei dstRate
, Resampler resampler
);
42 struct ChannelConverter
{
44 DevFmtChannels mSrcChans
;
45 DevFmtChannels mDstChans
;
47 ChannelConverter(DevFmtType srctype
, DevFmtChannels srcchans
, DevFmtChannels dstchans
)
48 : mSrcType(srctype
), mSrcChans(srcchans
), mDstChans(dstchans
)
51 void convert(const ALvoid
*src
, ALfloat
*dst
, ALsizei frames
) const;
53 DEF_NEWDEL(ChannelConverter
)
55 using ChannelConverterPtr
= std::unique_ptr
<ChannelConverter
>;
57 ChannelConverterPtr
CreateChannelConverter(DevFmtType srcType
, DevFmtChannels srcChans
,
58 DevFmtChannels dstChans
);
60 #endif /* CONVERTER_H */