diff options
Diffstat (limited to 'services/audioflinger/AudioResamplerSinc.h')
-rw-r--r-- | services/audioflinger/AudioResamplerSinc.h | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/services/audioflinger/AudioResamplerSinc.h b/services/audioflinger/AudioResamplerSinc.h index c53c66d..25fc025 100644 --- a/services/audioflinger/AudioResamplerSinc.h +++ b/services/audioflinger/AudioResamplerSinc.h @@ -27,14 +27,15 @@ namespace android { typedef const int32_t * (*readCoefficientsFn)(bool upDownSample); -typedef int32_t (*readResampleFirNumCoeffFn)(); -typedef int32_t (*readResampleFirLerpIntBitsFn)(); +typedef int32_t (*readResampleFirNumCoeffFn)(); +typedef int32_t (*readResampleFirLerpIntBitsFn)(); // ---------------------------------------------------------------------------- class AudioResamplerSinc : public AudioResampler { public: - AudioResamplerSinc(int bitDepth, int inChannelCount, int32_t sampleRate, int32_t quality = HIGH_QUALITY); + AudioResamplerSinc(int bitDepth, int inChannelCount, int32_t sampleRate, + src_quality quality = HIGH_QUALITY); virtual ~AudioResamplerSinc(); @@ -60,10 +61,6 @@ private: inline void read(int16_t*& impulse, uint32_t& phaseFraction, const int16_t* in, size_t inputIndex); - readCoefficientsFn mReadResampleCoefficients ; - readResampleFirNumCoeffFn mReadResampleFirNumCoeff; - readResampleFirLerpIntBitsFn mReadResampleFirLerpIntBits; - int16_t *mState; int16_t *mImpulse; int16_t *mRingFull; @@ -72,24 +69,28 @@ private: static const int32_t mFirCoefsDown[]; static const int32_t mFirCoefsUp[]; - void * mResampleCoeffLib; // ---------------------------------------------------------------------------- static const int32_t RESAMPLE_FIR_NUM_COEF = 8; static const int32_t RESAMPLE_FIR_LERP_INT_BITS = 4; - // we have 16 coefs samples per zero-crossing - static int coefsBits; - static int cShift; - static uint32_t cMask; + struct Constants { + // we have 16 coefs samples per zero-crossing + int coefsBits; + int cShift; + uint32_t cMask; + + int pShift; + uint32_t pMask; + + // number of zero-crossing on each side + unsigned int halfNumCoefs; + }; - // and we use 15 bits to interpolate between these samples - // this cannot change because the mul below rely on it. - static const int pLerpBits = 15; - static int pShift; - static uint32_t pMask; + static Constants highQualityConstants; + static Constants veryHighQualityConstants; + const Constants *mConstants; // points to appropriate set of coefficient parameters - // number of zero-crossing on each side - static unsigned int halfNumCoefs; + static void init_routine(); }; // ---------------------------------------------------------------------------- |