Loading services/audioflinger/AudioMixer.cpp +1 −13 Original line number Diff line number Diff line Loading @@ -763,21 +763,9 @@ bool AudioMixer::track_t::setResampler(uint32_t value, uint32_t devSampleRate) quality = AudioResampler::DEFAULT_QUALITY; } int bits; switch (mMixerInFormat) { case AUDIO_FORMAT_PCM_16_BIT: bits = 16; break; case AUDIO_FORMAT_PCM_FLOAT: bits = 32; // 32 bits to the AudioResampler::create() indicates float. break; default: LOG_ALWAYS_FATAL("Invalid mMixerInFormat: %#x", mMixerInFormat); break; } ALOGVV("Creating resampler with %d bits\n", bits); resampler = AudioResampler::create( bits, mMixerInFormat, // the resampler sees the number of channels after the downmixer, if any (int) (downmixerBufferProvider != NULL ? MAX_NUM_CHANNELS : channelCount), devSampleRate, quality); Loading services/audioflinger/AudioResampler.cpp +30 −25 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ namespace android { class AudioResamplerOrder1 : public AudioResampler { public: AudioResamplerOrder1(int bitDepth, int inChannelCount, int32_t sampleRate) : AudioResampler(bitDepth, inChannelCount, sampleRate, LOW_QUALITY), mX0L(0), mX0R(0) { AudioResamplerOrder1(int inChannelCount, int32_t sampleRate) : AudioResampler(inChannelCount, sampleRate, LOW_QUALITY), mX0L(0), mX0R(0) { } virtual void resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); Loading Loading @@ -145,7 +145,7 @@ static const uint32_t maxMHz = 130; // an arbitrary number that permits 3 VHQ, s static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static uint32_t currentMHz = 0; AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, AudioResampler* AudioResampler::create(audio_format_t format, int inChannelCount, int32_t sampleRate, src_quality quality) { bool atFinalQuality; Loading Loading @@ -216,34 +216,41 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, default: case LOW_QUALITY: ALOGV("Create linear Resampler"); resampler = new AudioResamplerOrder1(bitDepth, inChannelCount, sampleRate); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerOrder1(inChannelCount, sampleRate); break; case MED_QUALITY: ALOGV("Create cubic Resampler"); resampler = new AudioResamplerCubic(bitDepth, inChannelCount, sampleRate); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerCubic(inChannelCount, sampleRate); break; case HIGH_QUALITY: ALOGV("Create HIGH_QUALITY sinc Resampler"); resampler = new AudioResamplerSinc(bitDepth, inChannelCount, sampleRate); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerSinc(inChannelCount, sampleRate); break; case VERY_HIGH_QUALITY: ALOGV("Create VERY_HIGH_QUALITY sinc Resampler = %d", quality); resampler = new AudioResamplerSinc(bitDepth, inChannelCount, sampleRate, quality); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerSinc(inChannelCount, sampleRate, quality); break; case DYN_LOW_QUALITY: case DYN_MED_QUALITY: case DYN_HIGH_QUALITY: ALOGV("Create dynamic Resampler = %d", quality); if (bitDepth == 32) { /* bitDepth == 32 signals float precision */ resampler = new AudioResamplerDyn<float, float, float>(bitDepth, inChannelCount, if (format == AUDIO_FORMAT_PCM_FLOAT) { resampler = new AudioResamplerDyn<float, float, float>(inChannelCount, sampleRate, quality); } else if (quality == DYN_HIGH_QUALITY) { resampler = new AudioResamplerDyn<int32_t, int16_t, int32_t>(bitDepth, inChannelCount, } else { LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); if (quality == DYN_HIGH_QUALITY) { resampler = new AudioResamplerDyn<int32_t, int16_t, int32_t>(inChannelCount, sampleRate, quality); } else { resampler = new AudioResamplerDyn<int16_t, int16_t, int32_t>(bitDepth, inChannelCount, resampler = new AudioResamplerDyn<int16_t, int16_t, int32_t>(inChannelCount, sampleRate, quality); } } break; } Loading @@ -252,18 +259,17 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, return resampler; } AudioResampler::AudioResampler(int bitDepth, int inChannelCount, AudioResampler::AudioResampler(int inChannelCount, int32_t sampleRate, src_quality quality) : mBitDepth(bitDepth), mChannelCount(inChannelCount), mChannelCount(inChannelCount), mSampleRate(sampleRate), mInSampleRate(sampleRate), mInputIndex(0), mPhaseFraction(0), mLocalTimeFreq(0), mPTS(AudioBufferProvider::kInvalidPTS), mQuality(quality) { // sanity check on format if ((bitDepth != 16 && (quality < DYN_LOW_QUALITY || bitDepth != 32)) || inChannelCount < 1 if (inChannelCount < 1 || inChannelCount > (quality < DYN_LOW_QUALITY ? 2 : 8)) { LOG_ALWAYS_FATAL("Unsupported sample format %d quality %d bits, %d channels", quality, bitDepth, inChannelCount); LOG_ALWAYS_FATAL("Unsupported sample format %d quality %d channels", quality, inChannelCount); } if (sampleRate <= 0) { LOG_ALWAYS_FATAL("Unsupported sample rate %d Hz", sampleRate); Loading @@ -272,7 +278,6 @@ AudioResampler::AudioResampler(int bitDepth, int inChannelCount, // initialize common members mVolume[0] = mVolume[1] = 0; mBuffer.frameCount = 0; } AudioResampler::~AudioResampler() { Loading services/audioflinger/AudioResampler.h +3 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <cutils/compiler.h> #include <media/AudioBufferProvider.h> #include <system/audio.h> namespace android { // ---------------------------------------------------------------------------- Loading @@ -46,7 +47,7 @@ public: DYN_HIGH_QUALITY=7, }; static AudioResampler* create(int bitDepth, int inChannelCount, static AudioResampler* create(audio_format_t format, int inChannelCount, int32_t sampleRate, src_quality quality=DEFAULT_QUALITY); virtual ~AudioResampler(); Loading Loading @@ -86,7 +87,7 @@ protected: // multiplier to calculate fixed point phase increment static const double kPhaseMultiplier; AudioResampler(int bitDepth, int inChannelCount, int32_t sampleRate, src_quality quality); AudioResampler(int inChannelCount, int32_t sampleRate, src_quality quality); // prevent copying AudioResampler(const AudioResampler&); Loading @@ -94,7 +95,6 @@ protected: int64_t calculateOutputPTS(int outputFrameIndex); const int32_t mBitDepth; const int32_t mChannelCount; const int32_t mSampleRate; int32_t mInSampleRate; Loading services/audioflinger/AudioResamplerCubic.h +2 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,8 @@ namespace android { class AudioResamplerCubic : public AudioResampler { public: AudioResamplerCubic(int bitDepth, int inChannelCount, int32_t sampleRate) : AudioResampler(bitDepth, inChannelCount, sampleRate, MED_QUALITY) { AudioResamplerCubic(int inChannelCount, int32_t sampleRate) : AudioResampler(inChannelCount, sampleRate, MED_QUALITY) { } virtual void resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); Loading services/audioflinger/AudioResamplerDyn.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -162,9 +162,9 @@ void AudioResamplerDyn<TC, TI, TO>::Constants::set( } template<typename TC, typename TI, typename TO> AudioResamplerDyn<TC, TI, TO>::AudioResamplerDyn(int bitDepth, AudioResamplerDyn<TC, TI, TO>::AudioResamplerDyn( int inChannelCount, int32_t sampleRate, src_quality quality) : AudioResampler(bitDepth, inChannelCount, sampleRate, quality), : AudioResampler(inChannelCount, sampleRate, quality), mResampleFunc(0), mFilterSampleRate(0), mFilterQuality(DEFAULT_QUALITY), mCoefBuffer(NULL) { Loading Loading
services/audioflinger/AudioMixer.cpp +1 −13 Original line number Diff line number Diff line Loading @@ -763,21 +763,9 @@ bool AudioMixer::track_t::setResampler(uint32_t value, uint32_t devSampleRate) quality = AudioResampler::DEFAULT_QUALITY; } int bits; switch (mMixerInFormat) { case AUDIO_FORMAT_PCM_16_BIT: bits = 16; break; case AUDIO_FORMAT_PCM_FLOAT: bits = 32; // 32 bits to the AudioResampler::create() indicates float. break; default: LOG_ALWAYS_FATAL("Invalid mMixerInFormat: %#x", mMixerInFormat); break; } ALOGVV("Creating resampler with %d bits\n", bits); resampler = AudioResampler::create( bits, mMixerInFormat, // the resampler sees the number of channels after the downmixer, if any (int) (downmixerBufferProvider != NULL ? MAX_NUM_CHANNELS : channelCount), devSampleRate, quality); Loading
services/audioflinger/AudioResampler.cpp +30 −25 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ namespace android { class AudioResamplerOrder1 : public AudioResampler { public: AudioResamplerOrder1(int bitDepth, int inChannelCount, int32_t sampleRate) : AudioResampler(bitDepth, inChannelCount, sampleRate, LOW_QUALITY), mX0L(0), mX0R(0) { AudioResamplerOrder1(int inChannelCount, int32_t sampleRate) : AudioResampler(inChannelCount, sampleRate, LOW_QUALITY), mX0L(0), mX0R(0) { } virtual void resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); Loading Loading @@ -145,7 +145,7 @@ static const uint32_t maxMHz = 130; // an arbitrary number that permits 3 VHQ, s static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static uint32_t currentMHz = 0; AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, AudioResampler* AudioResampler::create(audio_format_t format, int inChannelCount, int32_t sampleRate, src_quality quality) { bool atFinalQuality; Loading Loading @@ -216,34 +216,41 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, default: case LOW_QUALITY: ALOGV("Create linear Resampler"); resampler = new AudioResamplerOrder1(bitDepth, inChannelCount, sampleRate); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerOrder1(inChannelCount, sampleRate); break; case MED_QUALITY: ALOGV("Create cubic Resampler"); resampler = new AudioResamplerCubic(bitDepth, inChannelCount, sampleRate); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerCubic(inChannelCount, sampleRate); break; case HIGH_QUALITY: ALOGV("Create HIGH_QUALITY sinc Resampler"); resampler = new AudioResamplerSinc(bitDepth, inChannelCount, sampleRate); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerSinc(inChannelCount, sampleRate); break; case VERY_HIGH_QUALITY: ALOGV("Create VERY_HIGH_QUALITY sinc Resampler = %d", quality); resampler = new AudioResamplerSinc(bitDepth, inChannelCount, sampleRate, quality); LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); resampler = new AudioResamplerSinc(inChannelCount, sampleRate, quality); break; case DYN_LOW_QUALITY: case DYN_MED_QUALITY: case DYN_HIGH_QUALITY: ALOGV("Create dynamic Resampler = %d", quality); if (bitDepth == 32) { /* bitDepth == 32 signals float precision */ resampler = new AudioResamplerDyn<float, float, float>(bitDepth, inChannelCount, if (format == AUDIO_FORMAT_PCM_FLOAT) { resampler = new AudioResamplerDyn<float, float, float>(inChannelCount, sampleRate, quality); } else if (quality == DYN_HIGH_QUALITY) { resampler = new AudioResamplerDyn<int32_t, int16_t, int32_t>(bitDepth, inChannelCount, } else { LOG_ALWAYS_FATAL_IF(format != AUDIO_FORMAT_PCM_16_BIT); if (quality == DYN_HIGH_QUALITY) { resampler = new AudioResamplerDyn<int32_t, int16_t, int32_t>(inChannelCount, sampleRate, quality); } else { resampler = new AudioResamplerDyn<int16_t, int16_t, int32_t>(bitDepth, inChannelCount, resampler = new AudioResamplerDyn<int16_t, int16_t, int32_t>(inChannelCount, sampleRate, quality); } } break; } Loading @@ -252,18 +259,17 @@ AudioResampler* AudioResampler::create(int bitDepth, int inChannelCount, return resampler; } AudioResampler::AudioResampler(int bitDepth, int inChannelCount, AudioResampler::AudioResampler(int inChannelCount, int32_t sampleRate, src_quality quality) : mBitDepth(bitDepth), mChannelCount(inChannelCount), mChannelCount(inChannelCount), mSampleRate(sampleRate), mInSampleRate(sampleRate), mInputIndex(0), mPhaseFraction(0), mLocalTimeFreq(0), mPTS(AudioBufferProvider::kInvalidPTS), mQuality(quality) { // sanity check on format if ((bitDepth != 16 && (quality < DYN_LOW_QUALITY || bitDepth != 32)) || inChannelCount < 1 if (inChannelCount < 1 || inChannelCount > (quality < DYN_LOW_QUALITY ? 2 : 8)) { LOG_ALWAYS_FATAL("Unsupported sample format %d quality %d bits, %d channels", quality, bitDepth, inChannelCount); LOG_ALWAYS_FATAL("Unsupported sample format %d quality %d channels", quality, inChannelCount); } if (sampleRate <= 0) { LOG_ALWAYS_FATAL("Unsupported sample rate %d Hz", sampleRate); Loading @@ -272,7 +278,6 @@ AudioResampler::AudioResampler(int bitDepth, int inChannelCount, // initialize common members mVolume[0] = mVolume[1] = 0; mBuffer.frameCount = 0; } AudioResampler::~AudioResampler() { Loading
services/audioflinger/AudioResampler.h +3 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <cutils/compiler.h> #include <media/AudioBufferProvider.h> #include <system/audio.h> namespace android { // ---------------------------------------------------------------------------- Loading @@ -46,7 +47,7 @@ public: DYN_HIGH_QUALITY=7, }; static AudioResampler* create(int bitDepth, int inChannelCount, static AudioResampler* create(audio_format_t format, int inChannelCount, int32_t sampleRate, src_quality quality=DEFAULT_QUALITY); virtual ~AudioResampler(); Loading Loading @@ -86,7 +87,7 @@ protected: // multiplier to calculate fixed point phase increment static const double kPhaseMultiplier; AudioResampler(int bitDepth, int inChannelCount, int32_t sampleRate, src_quality quality); AudioResampler(int inChannelCount, int32_t sampleRate, src_quality quality); // prevent copying AudioResampler(const AudioResampler&); Loading @@ -94,7 +95,6 @@ protected: int64_t calculateOutputPTS(int outputFrameIndex); const int32_t mBitDepth; const int32_t mChannelCount; const int32_t mSampleRate; int32_t mInSampleRate; Loading
services/audioflinger/AudioResamplerCubic.h +2 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,8 @@ namespace android { class AudioResamplerCubic : public AudioResampler { public: AudioResamplerCubic(int bitDepth, int inChannelCount, int32_t sampleRate) : AudioResampler(bitDepth, inChannelCount, sampleRate, MED_QUALITY) { AudioResamplerCubic(int inChannelCount, int32_t sampleRate) : AudioResampler(inChannelCount, sampleRate, MED_QUALITY) { } virtual void resample(int32_t* out, size_t outFrameCount, AudioBufferProvider* provider); Loading
services/audioflinger/AudioResamplerDyn.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -162,9 +162,9 @@ void AudioResamplerDyn<TC, TI, TO>::Constants::set( } template<typename TC, typename TI, typename TO> AudioResamplerDyn<TC, TI, TO>::AudioResamplerDyn(int bitDepth, AudioResamplerDyn<TC, TI, TO>::AudioResamplerDyn( int inChannelCount, int32_t sampleRate, src_quality quality) : AudioResampler(bitDepth, inChannelCount, sampleRate, quality), : AudioResampler(inChannelCount, sampleRate, quality), mResampleFunc(0), mFilterSampleRate(0), mFilterQuality(DEFAULT_QUALITY), mCoefBuffer(NULL) { Loading