summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/Threads.cpp
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2015-07-24 20:28:43 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-07-24 20:28:43 +0000
commit5ce059661dcbab8924edab400681fc408ee76123 (patch)
tree82709f0f74d4c8e89e8acdd751784a5f9103d620 /services/audioflinger/Threads.cpp
parent9f00e69c5f2702b66e9bdf8f4f75f99a338738d7 (diff)
parenteb9487e10294a4e73977f460f30eeaff503acd21 (diff)
downloadframeworks_av-5ce059661dcbab8924edab400681fc408ee76123.zip
frameworks_av-5ce059661dcbab8924edab400681fc408ee76123.tar.gz
frameworks_av-5ce059661dcbab8924edab400681fc408ee76123.tar.bz2
Merge "Fix capture overruns at non-primary sample rate" into mnc-dev
Diffstat (limited to 'services/audioflinger/Threads.cpp')
-rw-r--r--services/audioflinger/Threads.cpp20
1 files changed, 6 insertions, 14 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 43dd53c..0a7d4a2 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:
}