Merge "Fix issue 2428563: Camera rendered inoperable by voice call interruption."
This commit is contained in:
@@ -3247,7 +3247,10 @@ bool AudioFlinger::RecordThread::threadLoop()
|
||||
if (mBytesRead < 0) {
|
||||
LOGE("Error reading audio input");
|
||||
if (mActiveTrack->mState == TrackBase::ACTIVE) {
|
||||
sleep(1);
|
||||
// Force input into standby so that it tries to
|
||||
// recover at next read attempt
|
||||
mInput->standby();
|
||||
usleep(5000);
|
||||
}
|
||||
mRsmpInIndex = mFrameCount;
|
||||
framesOut = 0;
|
||||
@@ -3429,7 +3432,10 @@ status_t AudioFlinger::RecordThread::getNextBuffer(AudioBufferProvider::Buffer*
|
||||
if (mBytesRead < 0) {
|
||||
LOGE("RecordThread::getNextBuffer() Error reading audio input");
|
||||
if (mActiveTrack->mState == TrackBase::ACTIVE) {
|
||||
sleep(1);
|
||||
// Force input into standby so that it tries to
|
||||
// recover at next read attempt
|
||||
mInput->standby();
|
||||
usleep(5000);
|
||||
}
|
||||
buffer->raw = 0;
|
||||
buffer->frameCount = 0;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user