Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Unified Diff: media/audio/audio_output_controller.cc

Issue 14600025: Replace AudioSilenceDetector with an AudioPowerMonitor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698