Index: media/audio/fake_audio_input_stream.cc |
diff --git a/media/audio/fake_audio_input_stream.cc b/media/audio/fake_audio_input_stream.cc |
index 5ec09a45c870b16995d0aaa1545beb9fe4e13d2e..e05b257997e300db425736f5b380deeb2b250a4b 100644 |
--- a/media/audio/fake_audio_input_stream.cc |
+++ b/media/audio/fake_audio_input_stream.cc |
@@ -20,10 +20,16 @@ namespace { |
const int kBeepDurationMilliseconds = 20; |
const int kBeepFrequency = 400; |
+// Intervals between two automatic beeps. |
+const int kAutomaticBeepIntervalInMs = 500; |
+ |
+// Automatic beep will be triggered every |kAutomaticBeepIntervalInMs| unless |
+// users explicitly call BeepOnce(), which will disable the automatic beep. |
struct BeepContext { |
- BeepContext() : beep_once(false) {} |
+ BeepContext() : beep_once(false), automatic(true) {} |
base::Lock beep_lock; |
bool beep_once; |
+ bool automatic; |
}; |
static base::LazyInstance<BeepContext> g_beep_context = |
@@ -78,14 +84,37 @@ void FakeAudioInputStream::Start(AudioInputCallback* callback) { |
void FakeAudioInputStream::DoCallback() { |
DCHECK(callback_); |
+ const TimeTicks now = TimeTicks::Now(); |
+ base::TimeDelta next_callback_time = |
+ last_callback_time_ + callback_interval_ * 2 - now; |
DaleCurtis
2014/05/06 17:36:52
Where does this *2 come from?
no longer working on chromium
2014/05/07 08:55:41
This is old code moved from line 121.
I guess the
|
+ |
+ // If we are falling behind, try to catch up as much as we can in the next |
+ // callback. |
+ if (next_callback_time < base::TimeDelta()) |
+ next_callback_time = base::TimeDelta(); |
+ |
+ // Accumulate the time from the last beep. |
+ interval_from_last_beep_ += now - last_callback_time_; |
+ |
+ last_callback_time_ = now; |
+ |
memset(buffer_.get(), 0, buffer_size_); |
bool should_beep = false; |
{ |
BeepContext* beep_context = g_beep_context.Pointer(); |
base::AutoLock auto_lock(beep_context->beep_lock); |
- should_beep = beep_context->beep_once; |
- beep_context->beep_once = false; |
+ if (beep_context->automatic) { |
+ base::TimeDelta delta = interval_from_last_beep_ - |
+ TimeDelta::FromMilliseconds(kAutomaticBeepIntervalInMs); |
+ if (delta > base::TimeDelta()) { |
+ should_beep = true; |
+ interval_from_last_beep_ = delta; |
+ } |
+ } else { |
+ should_beep = beep_context->beep_once; |
+ beep_context->beep_once = false; |
+ } |
} |
// If this object was instructed to generate a beep or has started to |
@@ -103,7 +132,6 @@ void FakeAudioInputStream::DoCallback() { |
while (position + high_bytes <= buffer_size_) { |
// Write high values first. |
memset(buffer_.get() + position, 128, high_bytes); |
- |
// Then leave low values in the buffer with |high_bytes|. |
position += high_bytes * 2; |
} |
@@ -116,16 +144,6 @@ void FakeAudioInputStream::DoCallback() { |
callback_->OnData(this, buffer_.get(), buffer_size_, buffer_size_, 1.0); |
frames_elapsed_ += params_.frames_per_buffer(); |
- const TimeTicks now = TimeTicks::Now(); |
- base::TimeDelta next_callback_time = |
- last_callback_time_ + callback_interval_ * 2 - now; |
- |
- // If we are falling behind, try to catch up as much as we can in the next |
- // callback. |
- if (next_callback_time < base::TimeDelta()) |
- next_callback_time = base::TimeDelta(); |
- |
- last_callback_time_ = now; |
thread_.message_loop()->PostDelayedTask( |
FROM_HERE, |
base::Bind(&FakeAudioInputStream::DoCallback, base::Unretained(this)), |
@@ -163,6 +181,7 @@ void FakeAudioInputStream::BeepOnce() { |
BeepContext* beep_context = g_beep_context.Pointer(); |
base::AutoLock auto_lock(beep_context->beep_lock); |
beep_context->beep_once = true; |
+ beep_context->automatic = false; |
} |
} // namespace media |