diff options
author | Eric Laurent <elaurent@google.com> | 2010-03-05 16:01:47 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-03-05 16:01:47 -0800 |
commit | 3a2bee0e7f867ab6a7d36503731dec1432066470 (patch) | |
tree | 87a4603c9d8dcbd10c40f7916d58d2ba460614ef | |
parent | 4a68c51b96ff93b7cb41dc682e5c031bee828df0 (diff) | |
parent | 88335b1a749fe0157547907a2ce6c9632f4d2592 (diff) | |
download | frameworks_av-3a2bee0e7f867ab6a7d36503731dec1432066470.zip frameworks_av-3a2bee0e7f867ab6a7d36503731dec1432066470.tar.gz frameworks_av-3a2bee0e7f867ab6a7d36503731dec1432066470.tar.bz2 |
Merge "Fix issue 2428563: Camera rendered inoperable by voice call interruption."
-rw-r--r-- | media/libmedia/AudioRecord.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index bce3371..ad037d6 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -552,13 +552,17 @@ ssize_t AudioRecord::read(void* buffer, size_t userSize) audioBuffer.frameCount = userSize/frameSize(); - // Calling obtainBuffer() with a negative wait count causes - // an (almost) infinite wait time. - status_t err = obtainBuffer(&audioBuffer, -1); + // By using a wait count corresponding to twice the timeout period in + // obtainBuffer() we give a chance to recover once for a read timeout + // (if media_server crashed for instance) before returning a length of + // 0 bytes read to the client + status_t err = obtainBuffer(&audioBuffer, ((2 * MAX_RUN_TIMEOUT_MS) / WAIT_PERIOD_MS)); if (err < 0) { // out of buffers, return #bytes written if (err == status_t(NO_MORE_BUFFERS)) break; + if (err == status_t(TIMED_OUT)) + err = 0; return ssize_t(err); } |