OSDN Git Service

Fix bug with discarded AudioRecord::read count
authorGlenn Kasten <gkasten@google.com>
Mon, 17 Dec 2012 19:44:20 +0000 (11:44 -0800)
committerGlenn Kasten <gkasten@google.com>
Tue, 18 Dec 2012 01:26:44 +0000 (17:26 -0800)
Formerly, if an AudioRecord::read() got a timeout on obtainBuffer()
after already successfully transferring some data, then it returned zero.
This had the effect of discarding a partial transfer, which resulted in
a gap in the audio data delivered to the app.  Now if a timeout occurs
after a partial transfer, it returns that partial transfer count so that
no data is lost.

Change-Id: I0d9c2f4e495a400b56ef916a06613ba26537ca97

media/libmedia/AudioRecord.cpp

index c2ef68c..9fda0a5 100644 (file)
@@ -644,7 +644,8 @@ ssize_t AudioRecord::read(void* buffer, size_t userSize)
                 break;
             }
             if (err == status_t(TIMED_OUT)) {
-                err = 0;
+                // return partial transfer count
+                return read;
             }
             return ssize_t(err);
         }