Loading include/media/AudioResamplerPublic.h +10 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,16 @@ static inline size_t sourceFramesNeededWithTimestretch( return required * (double)speed + 1 + 1; // accounting for rounding dependencies } // Identifies sample rates that we associate with music // and thus eligible for better resampling and fast capture. // This is somewhat less than 44100 to allow for pitch correction // involving resampling as well as asynchronous resampling. #define AUDIO_PROCESSING_MUSIC_RATE 40000 static inline bool isMusicRate(uint32_t sampleRate) { return sampleRate >= AUDIO_PROCESSING_MUSIC_RATE; } } // namespace android // --------------------------------------------------------------------------- Loading services/audioflinger/AudioMixer.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -708,11 +708,10 @@ bool AudioMixer::track_t::setResampler(uint32_t trackSampleRate, uint32_t devSam // FIXME this is flawed for dynamic sample rates, as we choose the resampler // quality level based on the initial ratio, but that could change later. // Should have a way to distinguish tracks with static ratios vs. dynamic ratios. if (!((trackSampleRate == 44100 && devSampleRate == 48000) || (trackSampleRate == 48000 && devSampleRate == 44100))) { quality = AudioResampler::DYN_LOW_QUALITY; } else { if (isMusicRate(trackSampleRate)) { quality = AudioResampler::DEFAULT_QUALITY; } else { quality = AudioResampler::DYN_LOW_QUALITY; } // TODO: Remove MONO_HACK. Resampler sees #channels after the downmixer Loading services/audioflinger/Threads.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -5345,11 +5345,11 @@ AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger, } initFastCapture = // either capture sample rate is same as (a reasonable) primary output sample rate (((primaryOutputSampleRate == 44100 || primaryOutputSampleRate == 48000) && ((isMusicRate(primaryOutputSampleRate) && (mSampleRate == primaryOutputSampleRate)) || // or primary output sample rate is unknown, and capture sample rate is reasonable ((primaryOutputSampleRate == 0) && ((mSampleRate == 44100 || mSampleRate == 48000)))) && isMusicRate(mSampleRate))) && // and the buffer size is < 12 ms (mFrameCount * 1000) / mSampleRate < 12; break; Loading Loading @@ -6452,6 +6452,9 @@ status_t AudioFlinger::RecordThread::RecordBufferConverter::updateParameters( return NO_ERROR; } ALOGV("RecordBufferConverter updateParameters srcMask:%#x dstMask:%#x" " srcFormat:%#x dstFormat:%#x srcRate:%u dstRate:%u", srcChannelMask, dstChannelMask, srcFormat, dstFormat, srcSampleRate, dstSampleRate); const bool valid = audio_is_input_channel(srcChannelMask) && audio_is_input_channel(dstChannelMask) Loading services/audiopolicy/common/include/policy.h +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ // For mixed output and inputs, the policy will use max mixer sampling rates. // Do not limit sampling rate otherwise #define MAX_MIXER_SAMPLING_RATE 48000 #define MAX_MIXER_SAMPLING_RATE 192000 // For mixed output and inputs, the policy will use max mixer channel count. // Do not limit channel count otherwise Loading services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -611,9 +611,13 @@ uint32_t AudioPort::pickSamplingRate() const // For mixed output and inputs, use max mixer sampling rates. Do not // limit sampling rate otherwise // For inputs, also see checkCompatibleSamplingRate(). if (mType != AUDIO_PORT_TYPE_MIX) { maxRate = UINT_MAX; } // TODO: should mSamplingRates[] be ordered in terms of our preference // and we return the first (and hence most preferred) match? This is of concern if // we want to choose 96kHz over 192kHz for USB driver stability or resource constraints. for (size_t i = 0; i < mSamplingRates.size(); i ++) { if ((mSamplingRates[i] > samplingRate) && (mSamplingRates[i] <= maxRate)) { samplingRate = mSamplingRates[i]; Loading Loading
include/media/AudioResamplerPublic.h +10 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,16 @@ static inline size_t sourceFramesNeededWithTimestretch( return required * (double)speed + 1 + 1; // accounting for rounding dependencies } // Identifies sample rates that we associate with music // and thus eligible for better resampling and fast capture. // This is somewhat less than 44100 to allow for pitch correction // involving resampling as well as asynchronous resampling. #define AUDIO_PROCESSING_MUSIC_RATE 40000 static inline bool isMusicRate(uint32_t sampleRate) { return sampleRate >= AUDIO_PROCESSING_MUSIC_RATE; } } // namespace android // --------------------------------------------------------------------------- Loading
services/audioflinger/AudioMixer.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -708,11 +708,10 @@ bool AudioMixer::track_t::setResampler(uint32_t trackSampleRate, uint32_t devSam // FIXME this is flawed for dynamic sample rates, as we choose the resampler // quality level based on the initial ratio, but that could change later. // Should have a way to distinguish tracks with static ratios vs. dynamic ratios. if (!((trackSampleRate == 44100 && devSampleRate == 48000) || (trackSampleRate == 48000 && devSampleRate == 44100))) { quality = AudioResampler::DYN_LOW_QUALITY; } else { if (isMusicRate(trackSampleRate)) { quality = AudioResampler::DEFAULT_QUALITY; } else { quality = AudioResampler::DYN_LOW_QUALITY; } // TODO: Remove MONO_HACK. Resampler sees #channels after the downmixer Loading
services/audioflinger/Threads.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -5345,11 +5345,11 @@ AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger, } initFastCapture = // either capture sample rate is same as (a reasonable) primary output sample rate (((primaryOutputSampleRate == 44100 || primaryOutputSampleRate == 48000) && ((isMusicRate(primaryOutputSampleRate) && (mSampleRate == primaryOutputSampleRate)) || // or primary output sample rate is unknown, and capture sample rate is reasonable ((primaryOutputSampleRate == 0) && ((mSampleRate == 44100 || mSampleRate == 48000)))) && isMusicRate(mSampleRate))) && // and the buffer size is < 12 ms (mFrameCount * 1000) / mSampleRate < 12; break; Loading Loading @@ -6452,6 +6452,9 @@ status_t AudioFlinger::RecordThread::RecordBufferConverter::updateParameters( return NO_ERROR; } ALOGV("RecordBufferConverter updateParameters srcMask:%#x dstMask:%#x" " srcFormat:%#x dstFormat:%#x srcRate:%u dstRate:%u", srcChannelMask, dstChannelMask, srcFormat, dstFormat, srcSampleRate, dstSampleRate); const bool valid = audio_is_input_channel(srcChannelMask) && audio_is_input_channel(dstChannelMask) Loading
services/audiopolicy/common/include/policy.h +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ // For mixed output and inputs, the policy will use max mixer sampling rates. // Do not limit sampling rate otherwise #define MAX_MIXER_SAMPLING_RATE 48000 #define MAX_MIXER_SAMPLING_RATE 192000 // For mixed output and inputs, the policy will use max mixer channel count. // Do not limit channel count otherwise Loading
services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -611,9 +611,13 @@ uint32_t AudioPort::pickSamplingRate() const // For mixed output and inputs, use max mixer sampling rates. Do not // limit sampling rate otherwise // For inputs, also see checkCompatibleSamplingRate(). if (mType != AUDIO_PORT_TYPE_MIX) { maxRate = UINT_MAX; } // TODO: should mSamplingRates[] be ordered in terms of our preference // and we return the first (and hence most preferred) match? This is of concern if // we want to choose 96kHz over 192kHz for USB driver stability or resource constraints. for (size_t i = 0; i < mSamplingRates.size(); i ++) { if ((mSamplingRates[i] > samplingRate) && (mSamplingRates[i] <= maxRate)) { samplingRate = mSamplingRates[i]; Loading