diff options
| author | Andy Hung <hunga@google.com> | 2015-05-06 08:46:52 -0700 | 
|---|---|---|
| committer | Andy Hung <hunga@google.com> | 2015-05-12 09:30:51 -0700 | 
| commit | db4c031f518ae5806af73756273ff32cd8d0e4f8 (patch) | |
| tree | 62f9e0541acccc3acacf808d2a3cdad130eb819b | |
| parent | 18aa27016a94d0fee243637a80fd0741f89e08f2 (diff) | |
| download | frameworks_av-db4c031f518ae5806af73756273ff32cd8d0e4f8.zip frameworks_av-db4c031f518ae5806af73756273ff32cd8d0e4f8.tar.gz frameworks_av-db4c031f518ae5806af73756273ff32cd8d0e4f8.tar.bz2  | |
Update sampling rate to 192kHz for devices
Change-Id: I0a83206be51d7ae18ccf85b94b2127356307be69
| -rw-r--r-- | include/media/AudioResamplerPublic.h | 10 | ||||
| -rw-r--r-- | services/audioflinger/AudioMixer.cpp | 7 | ||||
| -rw-r--r-- | services/audioflinger/Threads.cpp | 7 | ||||
| -rwxr-xr-x | services/audiopolicy/common/include/policy.h | 2 | ||||
| -rw-r--r-- | services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp | 4 | 
5 files changed, 23 insertions, 7 deletions
diff --git a/include/media/AudioResamplerPublic.h b/include/media/AudioResamplerPublic.h index 53b8c13..6cf2ca9 100644 --- a/include/media/AudioResamplerPublic.h +++ b/include/media/AudioResamplerPublic.h @@ -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  // --------------------------------------------------------------------------- diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp index 7040af4..1348d08 100644 --- a/services/audioflinger/AudioMixer.cpp +++ b/services/audioflinger/AudioMixer.cpp @@ -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 diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 7feb63b..5ef017f 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -5328,11 +5328,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; @@ -6435,6 +6435,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) diff --git a/services/audiopolicy/common/include/policy.h b/services/audiopolicy/common/include/policy.h index a2327ee..4bda1f7 100755 --- a/services/audiopolicy/common/include/policy.h +++ b/services/audiopolicy/common/include/policy.h @@ -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 diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp index 2e4d423..afcd073 100644 --- a/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp @@ -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];  | 
