25#include "common/frac.h"
38typedef uint16 st_volume_t;
39typedef uint32 st_size_t;
40typedef uint32 st_rate_t;
48template <MixMode Mode,
typename T>
49static 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);
83static 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;
127RateConverter *makeRateConverter(st_rate_t inRate, st_rate_t outRate,
bool inStereo,
bool outStereo,
bool reverseStereo);
Definition: audiostream.h:50
virtual bool needsDraining() const =0
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