Handle audio HAL returning 0 bytes in record thread
Enter standby when HAL returns an error, but also consider 0 bytes
returned as NOT_ENOUGH_DATA.
Change-Id: Ica83142310e9c176f936e0440571a6034cbc575f
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index a44fb3e..582ab65 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -5984,7 +5984,7 @@
inputStandBy();
acquireWakeLock();
- // used to verify we've read at least one before evaluating how many bytes were read
+ // used to verify we've read at least once before evaluating how many bytes were read
bool readOnce = false;
// start recording
@@ -6499,9 +6499,9 @@
if (framesReady == 0) {
mBytesRead = mInput->stream->read(mInput->stream, mRsmpInBuffer, mInputBytes);
- if (mBytesRead < 0) {
- ALOGE("RecordThread::getNextBuffer() Error reading audio input");
- if (mActiveTrack->mState == TrackBase::ACTIVE) {
+ if (mBytesRead <= 0) {
+ if ((mBytesRead < 0) && (mActiveTrack->mState == TrackBase::ACTIVE)) {
+ ALOGE("RecordThread::getNextBuffer() Error reading audio input");
// Force input into standby so that it tries to
// recover at next read attempt
inputStandBy();