Merge "Add retry mechanism to AudioRecord::restoreRecord_l()."

gugelfrei
Paul Mclean 6 years ago committed by Android (Google) Code Review
commit 3eb954d005

@ -1231,6 +1231,14 @@ status_t AudioRecord::restoreRecord_l(const char *from)
ALOGW("dead IAudioRecord, creating a new one from %s()", from);
++mSequence;
const int INITIAL_RETRIES = 3;
int retries = INITIAL_RETRIES;
retry:
if (retries < INITIAL_RETRIES) {
// refresh the audio configuration cache in this process to make sure we get new
// input parameters and new IAudioRecord in createRecord_l()
AudioSystem::clearAudioConfigCache();
}
mFlags = mOrigFlags;
// if the new IAudioRecord is created, createRecord_l() will modify the
@ -1239,7 +1247,11 @@ status_t AudioRecord::restoreRecord_l(const char *from)
Modulo<uint32_t> position(mProxy->getPosition());
mNewPosition = position + mUpdatePeriod;
status_t result = createRecord_l(position, mOpPackageName);
if (result == NO_ERROR) {
if (result != NO_ERROR) {
ALOGW("%s(): createRecord_l failed, do not retry", __func__);
retries = 0;
} else {
if (mActive) {
// callback thread or sync event hasn't changed
// FIXME this fails if we have a new AudioFlinger instance
@ -1248,6 +1260,14 @@ status_t AudioRecord::restoreRecord_l(const char *from)
}
mFramesReadServerOffset = mFramesRead; // server resets to zero so we need an offset.
}
if (result != NO_ERROR) {
ALOGW("%s() failed status %d, retries %d", __func__, result, retries);
if (--retries > 0) {
goto retry;
}
}
if (result != NO_ERROR) {
ALOGW("restoreRecord_l() failed status %d", result);
mActive = false;

Loading…
Cancel
Save