| Index: media/audio/mac/audio_low_latency_input_mac.cc
|
| diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc
|
| index c034b61f9d1ee2627f18a2d2c85a3c9bd0267cc6..da84e95a2fb1bd9c2c1e6b50af08e786134b43e1 100644
|
| --- a/media/audio/mac/audio_low_latency_input_mac.cc
|
| +++ b/media/audio/mac/audio_low_latency_input_mac.cc
|
| @@ -586,7 +586,8 @@ OSStatus AUAudioInputStream::InputProc(void* user_data,
|
| if (result) {
|
| UMA_HISTOGRAM_SPARSE_SLOWLY("Media.AudioInputCbErrorMac", result);
|
| OSSTATUS_LOG(ERROR, result) << "AudioUnitRender() failed ";
|
| - if (result == kAudioUnitErr_TooManyFramesToProcess) {
|
| + if (result == kAudioUnitErr_TooManyFramesToProcess ||
|
| + result == kAudioUnitErr_CannotDoInCurrentContext) {
|
| DCHECK(!audio_input->last_success_time_.is_null());
|
| // We delay stopping the stream for kAudioUnitErr_TooManyFramesToProcess
|
| // since it has been observed that some USB headsets can cause this error
|
| @@ -595,19 +596,19 @@ OSStatus AUAudioInputStream::InputProc(void* user_data,
|
| // Instead, we measure time since last valid audio frame and call
|
| // HandleError() only if a too long error sequence is detected. We do
|
| // this to avoid ending up in a non recoverable bad core audio state.
|
| + // Also including kAudioUnitErr_CannotDoInCurrentContext since long
|
| + // sequences can be produced in combination with e.g. sample-rate changes
|
| + // for input devices.
|
| base::TimeDelta time_since_last_success =
|
| base::TimeTicks::Now() - audio_input->last_success_time_;
|
| if ((time_since_last_success >
|
| base::TimeDelta::FromSeconds(kMaxErrorTimeoutInSeconds))) {
|
| - LOG(ERROR) << "Too long sequence of TooManyFramesToProcess errors!";
|
| + const char* err = (result == kAudioUnitErr_TooManyFramesToProcess)
|
| + ? "kAudioUnitErr_TooManyFramesToProcess"
|
| + : "kAudioUnitErr_CannotDoInCurrentContext";
|
| + LOG(ERROR) << "Too long sequence of " << err << " errors!";
|
| audio_input->HandleError(result);
|
| }
|
| - } else if (result == kAudioUnitErr_CannotDoInCurrentContext) {
|
| - // Returned when an audio unit is in a state where it can't perform the
|
| - // requested action now - but it could later.
|
| - // TODO(henrika): figure out why we see this error message; do nothing
|
| - // for now. Hoping that we will get back on track soon.
|
| - LOG(ERROR) << "kAudioUnitErr_CannotDoInCurrentContext";
|
| } else {
|
| // We have also seen kAudioUnitErr_NoConnection in some cases. Bailing
|
| // out for this error for now.
|
|
|