diff options
author | Glenn Kasten <gkasten@google.com> | 2014-02-27 13:35:06 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2014-02-28 12:23:45 -0800 |
commit | 2c48f27be6b3ae58e451d9b56c1dfd00e606f345 (patch) | |
tree | 4ce653acdeb8bce659944f7697cf36a344f026fe /media/libmedia/AudioRecord.cpp | |
parent | 33ca5cf8826f5fcd9c011e8d336138b62d982f2a (diff) | |
download | frameworks_av-2c48f27be6b3ae58e451d9b56c1dfd00e606f345.zip frameworks_av-2c48f27be6b3ae58e451d9b56c1dfd00e606f345.tar.gz frameworks_av-2c48f27be6b3ae58e451d9b56c1dfd00e606f345.tar.bz2 |
Make openRecord_l more like createTrack_l for fast tracks: part 2
Assume double-buffering because we don't know the true HAL sample rate,
and for fast tracks we must accomodate kernel scheduling and app
computation jitter.
Change-Id: I983d6048a8b4814cfa5bf789397cdd9f1572256c
Diffstat (limited to 'media/libmedia/AudioRecord.cpp')
-rw-r--r-- | media/libmedia/AudioRecord.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index 8b92669..a8e1f5d 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -451,6 +451,9 @@ status_t AudioRecord::openRecord_l(size_t epoch) } } + // FIXME Assume double buffering, because we don't know the true HAL sample rate + const uint32_t nBuffering = 2; + mNotificationFramesAct = mNotificationFramesReq; size_t frameCount = mReqFrameCount; @@ -522,23 +525,21 @@ status_t AudioRecord::openRecord_l(size_t epoch) } frameCount = temp; - // FIXME missing fast track frameCount logic mAwaitBoost = false; if (mFlags & AUDIO_INPUT_FLAG_FAST) { if (trackFlags & IAudioFlinger::TRACK_FAST) { - ALOGV("AUDIO_INPUT_FLAG_FAST successful; frameCount %u", mFrameCount); + ALOGV("AUDIO_INPUT_FLAG_FAST successful; frameCount %u", frameCount); mAwaitBoost = true; - // double-buffering is not required for fast tracks, due to tighter scheduling - if (mNotificationFramesAct == 0 || mNotificationFramesAct > mFrameCount) { - mNotificationFramesAct = mFrameCount; - } } else { - ALOGV("AUDIO_INPUT_FLAG_FAST denied by server; frameCount %u", mFrameCount); + ALOGV("AUDIO_INPUT_FLAG_FAST denied by server; frameCount %u", frameCount); // once denied, do not request again if IAudioRecord is re-created mFlags = (audio_input_flags_t) (mFlags & ~AUDIO_INPUT_FLAG_FAST); - if (mNotificationFramesAct == 0 || mNotificationFramesAct > mFrameCount/2) { - mNotificationFramesAct = mFrameCount/2; - } + } + // Theoretically double-buffering is not required for fast tracks, + // due to tighter scheduling. But in practice, to accomodate kernels with + // scheduling jitter, and apps with computation jitter, we use double-buffering. + if (mNotificationFramesAct == 0 || mNotificationFramesAct > frameCount/nBuffering) { + mNotificationFramesAct = frameCount/nBuffering; } } |