OSDN Git Service

Handle audio HAL returning 0 bytes in record thread
authorJean-Michel Trivi <jmtrivi@google.com>
Thu, 13 Sep 2012 18:44:00 +0000 (11:44 -0700)
committerJean-Michel Trivi <jmtrivi@google.com>
Thu, 13 Sep 2012 19:02:15 +0000 (12:02 -0700)
Enter standby when HAL returns an error, but also consider 0 bytes
  returned as NOT_ENOUGH_DATA.

Change-Id: Ica83142310e9c176f936e0440571a6034cbc575f

services/audioflinger/AudioFlinger.cpp

index a44fb3e..582ab65 100644 (file)
@@ -5984,7 +5984,7 @@ bool AudioFlinger::RecordThread::threadLoop()
     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 @@ status_t AudioFlinger::RecordThread::getNextBuffer(AudioBufferProvider::Buffer*
 
     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();