12 #ifndef hifi_AudioSRC_h
13 #define hifi_AudioSRC_h
17 static const int SRC_MAX_CHANNELS = 4;
20 static const int SRC_PHASEBITS = 9;
21 static const int SRC_PHASES = (1 << SRC_PHASEBITS);
22 static const int SRC_FRACBITS = 32 - SRC_PHASEBITS;
23 static const uint32_t SRC_FRACMASK = (1 << SRC_FRACBITS) - 1;
25 static const float QFRAC_TO_FLOAT = 1.0f / (1 << SRC_FRACBITS);
26 static const float Q32_TO_FLOAT = 1.0f / (1ULL << 32);
29 static const int SRC_BLOCK = 256;
40 AudioSRC(
int inputSampleRate,
int outputSampleRate,
int numChannels, Quality quality = MEDIUM_QUALITY);
44 int render(
float** inputs,
float** outputs,
int inputFrames);
47 int render(
const int16_t* input, int16_t* output,
int inputFrames);
50 int render(
const float* input,
float* output,
int inputFrames);
52 int getMinOutput(
int inputFrames);
53 int getMaxOutput(
int inputFrames);
54 int getMinInput(
int outputFrames);
55 int getMaxInput(
int outputFrames);
58 float* _polyphaseFilter;
61 float* _history[SRC_MAX_CHANNELS];
62 float* _inputs[SRC_MAX_CHANNELS];
63 float* _outputs[SRC_MAX_CHANNELS];
66 int _outputSampleRate;
79 int createRationalFilter(
int upFactor,
int downFactor,
float gain, Quality quality);
80 int createIrrationalFilter(
int upFactor,
int downFactor,
float gain, Quality quality);
82 int multirateFilter1(
const float* input0,
float* output0,
int inputFrames);
83 int multirateFilter2(
const float* input0,
const float* input1,
float* output0,
float* output1,
int inputFrames);
84 int multirateFilter4(
const float* input0,
const float* input1,
const float* input2,
const float* input3,
85 float* output0,
float* output1,
float* output2,
float* output3,
int inputFrames);
87 int multirateFilter1_ref(
const float* input0,
float* output0,
int inputFrames);
88 int multirateFilter2_ref(
const float* input0,
const float* input1,
float* output0,
float* output1,
int inputFrames);
89 int multirateFilter4_ref(
const float* input0,
const float* input1,
const float* input2,
const float* input3,
90 float* output0,
float* output1,
float* output2,
float* output3,
int inputFrames);
92 int multirateFilter1_AVX2(
const float* input0,
float* output0,
int inputFrames);
93 int multirateFilter2_AVX2(
const float* input0,
const float* input1,
float* output0,
float* output1,
int inputFrames);
94 int multirateFilter4_AVX2(
const float* input0,
const float* input1,
const float* input2,
const float* input3,
95 float* output0,
float* output1,
float* output2,
float* output3,
int inputFrames);
97 void convertInput(
const int16_t* input,
float** outputs,
int numFrames);
98 void convertOutput(
float** inputs, int16_t* output,
int numFrames);
100 void convertInput(
const float* input,
float** outputs,
int numFrames);
101 void convertOutput(
float** inputs,
float* output,
int numFrames);