Index: media/audio/audio_output_controller.cc |
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc |
index f41ed74b65bed526c318cbabc05ec50e2fd5eed6..e508bec6503725589b0acfdd3ed57f5608ee4ff7 100644 |
--- a/media/audio/audio_output_controller.cc |
+++ b/media/audio/audio_output_controller.cc |
@@ -11,7 +11,7 @@ |
#include "base/threading/platform_thread.h" |
#include "base/time.h" |
#include "build/build_config.h" |
-#include "media/audio/audio_silence_detector.h" |
+#include "media/audio/audio_power_monitor.h" |
#include "media/audio/audio_util.h" |
#include "media/audio/shared_memory_util.h" |
@@ -20,16 +20,9 @@ using base::TimeDelta; |
namespace media { |
-// Amount of contiguous time where all audio is silent before considering the |
-// stream to have transitioned and EventHandler::OnAudible() should be called. |
-static const int kQuestionableSilencePeriodMillis = 50; |
- |
-// Sample value range below which audio is considered indistinguishably silent. |
-// |
-// TODO(miu): This value should be specified in dbFS units rather than full |
-// scale. See TODO in audio_silence_detector.h. |
-static const float kIndistinguishableSilenceThreshold = |
- 1.0f / 4096.0f; // Note: This is approximately -72 dbFS. |
+// Amount of time between calls to EventHandler::OnPowerMeasured() to report |
+// current power levels in the audio signal. |
+static const float kPowerMeasurementPeriodSeconds = 50.0f / 1000.0f; |
DaleCurtis
2013/05/16 18:24:45
Confusing, this doesn't look like it's in seconds?
miu
2013/05/16 21:44:11
Doh! I had already fixed that before requesting t
|
// Polling-related constants. |
const int AudioOutputController::kPollNumAttempts = 3; |
@@ -189,20 +182,20 @@ void AudioOutputController::StartStream() { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
state_ = kPlaying; |
- silence_detector_.reset(new AudioSilenceDetector( |
+ // Start monitoring power levels and send an initial notification that we're |
+ // starting in silence. |
+ handler_->OnPowerMeasured(AudioPowerMonitor::kZeroPowerDBFS); |
+ power_monitor_.reset(new AudioPowerMonitor( |
params_.sample_rate(), |
- TimeDelta::FromMilliseconds(kQuestionableSilencePeriodMillis), |
- kIndistinguishableSilenceThreshold)); |
+ TimeDelta::FromMilliseconds(kPowerMeasurementPeriodSeconds), |
+ MessageLoop::current(), |
+ base::Bind(&EventHandler::OnPowerMeasured, base::Unretained(handler_)))); |
// We start the AudioOutputStream lazily. |
AllowEntryToOnMoreIOData(); |
stream_->Start(this); |
- // Tell the event handler that we are now playing, and also start the silence |
- // detection notifications. |
handler_->OnPlaying(); |
- silence_detector_->Start( |
- base::Bind(&EventHandler::OnAudible, base::Unretained(handler_))); |
} |
void AudioOutputController::StopStream() { |
@@ -215,8 +208,9 @@ void AudioOutputController::StopStream() { |
} else if (state_ == kPlaying) { |
stream_->Stop(); |
DisallowEntryToOnMoreIOData(); |
- silence_detector_->Stop(true); |
- silence_detector_.reset(); |
+ power_monitor_.reset(); |
+ // Send a final notification that we're ending in silence. |
+ handler_->OnPowerMeasured(AudioPowerMonitor::kZeroPowerDBFS); |
state_ = kPaused; |
} |
} |
@@ -296,7 +290,7 @@ int AudioOutputController::OnMoreIOData(AudioBus* source, |
sync_reader_->UpdatePendingBytes( |
buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); |
- silence_detector_->Scan(dest, frames); |
+ power_monitor_->Scan(dest, frames); |
AllowEntryToOnMoreIOData(); |
return frames; |