25 #include "common/frac.h" 38 typedef uint16 st_volume_t;
39 typedef uint32 st_size_t;
40 typedef uint32 st_rate_t;
48 template <MixMode Mode,
typename T>
49 static inline void processSample(T& a,
int b) {
50 constexpr
unsigned long long highestBit = 1ULL << (
sizeof(T) * 8 - 1);
51 constexpr
int maxVal = (int)(highestBit - 1);
52 constexpr
int minVal = ~maxVal;
54 #ifdef OUTPUT_UNSIGNED_AUDIO 55 constexpr
int signMask = (int)highestBit;
58 if (Mode == MIX_ADD) {
60 }
else if (Mode == MIX_CLAMPED_ADD) {
62 #ifdef OUTPUT_UNSIGNED_AUDIO 63 val = ((int)a ^ signMask) + b;
70 else if (val < minVal)
73 #ifdef OUTPUT_UNSIGNED_AUDIO 74 a = (T)(val ^ signMask);
83 static inline void clampedAdd(T& a,
int b) {
84 processSample<MIX_CLAMPED_ADD>(a, b);
111 virtual int convert(
AudioStream &input, byte *outBuffer, uint outBytesPerSample, st_size_t numSamples, st_volume_t vol_l, st_volume_t vol_r, MixMode mixMode) = 0;
113 virtual void setInputRate(st_rate_t inputRate) = 0;
114 virtual void setOutputRate(st_rate_t outputRate) = 0;
116 virtual st_rate_t getInputRate()
const = 0;
117 virtual st_rate_t getOutputRate()
const = 0;
127 RateConverter *makeRateConverter(st_rate_t inRate, st_rate_t outRate,
bool inStereo,
bool outStereo,
bool reverseStereo);
virtual int convert(AudioStream &input, byte *outBuffer, uint outBytesPerSample, st_size_t numSamples, st_volume_t vol_l, st_volume_t vol_r, MixMode mixMode)=0
Definition: audiostream.h:50
virtual bool needsDraining() const =0