summaryrefslogtreecommitdiffstats
path: root/media/audio/audio_input_controller.cc
diff options
context:
space:
mode:
authormilanb@chromium.org <milanb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-06 01:07:37 +0000
committermilanb@chromium.org <milanb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-06 01:07:37 +0000
commit30aee8a3e31c63f1e5403d4c457ef9842c6312b5 (patch)
treec5b6bce50a26fad3300d1c5ff43fb78d5cf77cda /media/audio/audio_input_controller.cc
parentc3875e25dfef551a8a957661e38b9345dd301e07 (diff)
downloadchromium_src-30aee8a3e31c63f1e5403d4c457ef9842c6312b5.zip
chromium_src-30aee8a3e31c63f1e5403d4c457ef9842c6312b5.tar.gz
chromium_src-30aee8a3e31c63f1e5403d4c457ef9842c6312b5.tar.bz2
Make initial reset period configurable for audio input no data timer.
iOS needs extra initial delay in the reset timer to avoid getting killed because there is a background music fading out. BUG=b/6754065 Review URL: https://chromiumcodereview.appspot.com/10911067 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155082 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/audio_input_controller.cc')
-rw-r--r--media/audio/audio_input_controller.cc33
1 files changed, 21 insertions, 12 deletions
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc
index 17d1216..99bb420 100644
--- a/media/audio/audio_input_controller.cc
+++ b/media/audio/audio_input_controller.cc
@@ -10,7 +10,14 @@
namespace {
const int kMaxInputChannels = 2;
-const int kTimerResetInterval = 1; // One second.
+const int kTimerResetIntervalSeconds = 1;
+#if defined(OS_IOS)
+// The first callback on iOS is received after the current background
+// audio has faded away.
+const int kTimerInitialIntervalSeconds = 4;
+#else
+const int kTimerInitialIntervalSeconds = 1;
+#endif // defined(OS_IOS)
}
namespace media {
@@ -139,14 +146,12 @@ void AudioInputController::DoCreate(AudioManager* audio_manager,
}
DCHECK(!no_data_timer_.get());
- // Create the data timer which will call DoCheckForNoData() after a delay
- // of |kTimerResetInterval| seconds. The timer is started in DoRecord()
- // and restarted in each DoCheckForNoData() callback.
- no_data_timer_.reset(new base::DelayTimer<AudioInputController>(FROM_HERE,
- base::TimeDelta::FromSeconds(kTimerResetInterval),
- this,
- &AudioInputController::DoCheckForNoData));
-
+ // Create the data timer which will call DoCheckForNoData(). The timer
+ // is started in DoRecord() and restarted in each DoCheckForNoData() callback.
+ no_data_timer_.reset(new base::Timer(
+ FROM_HERE, base::TimeDelta::FromSeconds(kTimerInitialIntervalSeconds),
+ base::Bind(&AudioInputController::DoCheckForNoData,
+ base::Unretained(this)), false));
state_ = kCreated;
handler_->OnCreated(this);
}
@@ -162,7 +167,7 @@ void AudioInputController::DoRecord() {
state_ = kRecording;
}
- // Start the data timer. Once |kTimerResetInterval| seconds have passed,
+ // Start the data timer. Once |kTimerResetIntervalSeconds| have passed,
// a callback to DoCheckForNoData() is made.
no_data_timer_->Reset();
@@ -243,8 +248,12 @@ void AudioInputController::DoCheckForNoData() {
// flag will only be disabled during a very short period.
SetDataIsActive(false);
- // Restart the timer to ensure that we check the flag in one second again.
- no_data_timer_->Reset();
+ // Restart the timer to ensure that we check the flag again in
+ // |kTimerResetIntervalSeconds|.
+ no_data_timer_->Start(
+ FROM_HERE, base::TimeDelta::FromSeconds(kTimerResetIntervalSeconds),
+ base::Bind(&AudioInputController::DoCheckForNoData,
+ base::Unretained(this)));
}
void AudioInputController::OnData(AudioInputStream* stream, const uint8* data,