summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2015-07-22 09:15:17 -0700
committerGlenn Kasten <gkasten@google.com>2015-07-22 12:20:43 -0700
commiteb9487e10294a4e73977f460f30eeaff503acd21 (patch)
treefdd7dfd6fd2074f9d0684ed9b11dd851dc469d50 /services
parent8f0547a954b39d5750488be7e060ebe1ebfdf666 (diff)
downloadframeworks_av-eb9487e10294a4e73977f460f30eeaff503acd21.zip
frameworks_av-eb9487e10294a4e73977f460f30eeaff503acd21.tar.gz
frameworks_av-eb9487e10294a4e73977f460f30eeaff503acd21.tar.bz2
Fix capture overruns at non-primary sample rate
and small buffer size. Also: Pull out the magic number "12 ms" to a named constant. Remove obsolete AudioFlinger::mPrimaryOutputSampleRate. Bug: 22662814 Change-Id: I261f75a222c4505a84aad2493d251bd2dea59f68
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp3
-rw-r--r--services/audioflinger/AudioFlinger.h4
-rw-r--r--services/audioflinger/Threads.cpp20
3 files changed, 7 insertions, 20 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 8f1e050..9ec5802 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -181,7 +181,6 @@ AudioFlinger::AudioFlinger()
mIsLowRamDevice(true),
mIsDeviceTypeKnown(false),
mGlobalEffectEnableTime(0),
- mPrimaryOutputSampleRate(0),
mSystemReady(false)
{
getpid_cached = getpid();
@@ -1869,8 +1868,6 @@ status_t AudioFlinger::openOutput(audio_module_handle_t module,
mHardwareStatus = AUDIO_HW_SET_MODE;
mPrimaryHardwareDev->hwDevice()->set_mode(mPrimaryHardwareDev->hwDevice(), mMode);
mHardwareStatus = AUDIO_HW_IDLE;
-
- mPrimaryOutputSampleRate = config->sample_rate;
}
return NO_ERROR;
}
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 4f7e27d..20c34ef 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -763,9 +763,7 @@ private:
sp<PatchPanel> mPatchPanel;
- uint32_t mPrimaryOutputSampleRate; // sample rate of the primary output, or zero if none
- // protected by mHardwareLock
- bool mSystemReady;
+ bool mSystemReady;
};
#undef INCLUDING_FROM_AUDIOFLINGER_H
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index c360051..3057d9d 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -125,10 +125,15 @@ static const uint32_t kMinThreadSleepTimeUs = 5000;
static const uint32_t kMaxThreadSleepTimeShift = 2;
// minimum normal sink buffer size, expressed in milliseconds rather than frames
+// FIXME This should be based on experimentally observed scheduling jitter
static const uint32_t kMinNormalSinkBufferSizeMs = 20;
// maximum normal sink buffer size
static const uint32_t kMaxNormalSinkBufferSizeMs = 24;
+// minimum capture buffer size in milliseconds to _not_ need a fast capture thread
+// FIXME This should be based on experimentally observed scheduling jitter
+static const uint32_t kMinNormalCaptureBufferSizeMs = 12;
+
// Offloaded output thread standby delay: allows track transition without going to standby
static const nsecs_t kOffloadStandbyDelayNs = seconds(1);
@@ -5490,20 +5495,7 @@ AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger,
initFastCapture = true;
break;
case FastCapture_Static:
- uint32_t primaryOutputSampleRate;
- {
- AutoMutex _l(audioFlinger->mHardwareLock);
- primaryOutputSampleRate = audioFlinger->mPrimaryOutputSampleRate;
- }
- initFastCapture =
- // either capture sample rate is same as (a reasonable) primary output sample rate
- ((isMusicRate(primaryOutputSampleRate) &&
- (mSampleRate == primaryOutputSampleRate)) ||
- // or primary output sample rate is unknown, and capture sample rate is reasonable
- ((primaryOutputSampleRate == 0) &&
- isMusicRate(mSampleRate))) &&
- // and the buffer size is < 12 ms
- (mFrameCount * 1000) / mSampleRate < 12;
+ initFastCapture = (mFrameCount * 1000) / mSampleRate < kMinNormalCaptureBufferSizeMs;
break;
// case FastCapture_Dynamic:
}