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 5623bce162231fdb3016e2615bb7497c8d174cf4..5b78a80b319f2ee9df00e5e40a531a2d8767d13c 100644 |
--- a/media/audio/mac/audio_low_latency_input_mac.cc |
+++ b/media/audio/mac/audio_low_latency_input_mac.cc |
@@ -274,6 +274,22 @@ void AUAudioInputStream::Start(AudioInputCallback* callback) { |
DLOG_IF(ERROR, !audio_unit_) << "Open() has not been called successfully"; |
if (started_ || !audio_unit_) |
return; |
+ |
+ // Check if we should defer Start() for http://crbug.com/160920. |
+ if (manager_->ShouldDeferStreamStart()) { |
+ // Use a cancellable closure so that if Stop() is called before Start() |
+ // actually runs, we can cancel the pending start. |
+ DCHECK(deferred_start_cb_.IsCancelled()); |
+ deferred_start_cb_.Reset(base::Bind( |
+ &AUAudioInputStream::Start, base::Unretained(this), callback)); |
+ manager_->GetTaskRunner()->PostDelayedTask( |
+ FROM_HERE, |
+ deferred_start_cb_.callback(), |
+ base::TimeDelta::FromSeconds( |
+ AudioManagerMac::kStartDelayInSecsForPowerEvents)); |
+ return; |
+ } |
+ |
sink_ = callback; |
StartAgc(); |
OSStatus result = AudioOutputUnitStart(audio_unit_); |