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

Unified Diff: media/base/audio_renderer_mixer.cc

Issue 301223012: Deliver RenderCallbackErrors even when mixer inputs are paused. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
« no previous file with comments | « media/base/audio_renderer_mixer.h ('k') | media/base/audio_renderer_mixer_input.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/audio_renderer_mixer.cc
diff --git a/media/base/audio_renderer_mixer.cc b/media/base/audio_renderer_mixer.cc
index 11b12110260d9cbf6d4325db50afbcdc438f5d42..7ee07181574e5beb7b9acac3a8ff3780157cec19 100644
--- a/media/base/audio_renderer_mixer.cc
+++ b/media/base/audio_renderer_mixer.cc
@@ -31,42 +31,51 @@ AudioRendererMixer::~AudioRendererMixer() {
// Ensures that all mixer inputs have stopped themselves prior to destruction
// and have called RemoveMixerInput().
- DCHECK_EQ(mixer_inputs_.size(), 0U);
+ DCHECK_EQ(error_callbacks_.size(), 0U);
}
-void AudioRendererMixer::AddMixerInput(AudioConverter::InputCallback* input,
- const base::Closure& error_cb) {
- base::AutoLock auto_lock(mixer_inputs_lock_);
-
+void AudioRendererMixer::AddMixerInput(AudioConverter::InputCallback* input) {
+ base::AutoLock auto_lock(lock_);
if (!playing_) {
playing_ = true;
last_play_time_ = base::TimeTicks::Now();
audio_sink_->Play();
}
- DCHECK(mixer_inputs_.find(input) == mixer_inputs_.end());
- mixer_inputs_[input] = error_cb;
+ DCHECK(error_callbacks_.find(input) != error_callbacks_.end());
audio_converter_.AddInput(input);
}
void AudioRendererMixer::RemoveMixerInput(
AudioConverter::InputCallback* input) {
- base::AutoLock auto_lock(mixer_inputs_lock_);
+ base::AutoLock auto_lock(lock_);
audio_converter_.RemoveInput(input);
+}
- DCHECK(mixer_inputs_.find(input) != mixer_inputs_.end());
- mixer_inputs_.erase(input);
+void AudioRendererMixer::RegisterErrorCallback(
+ AudioConverter::InputCallback* input,
scherkus (not reviewing) 2014/06/03 02:01:31 would using a map/list/vector work? there doesn't
DaleCurtis 2014/06/03 20:26:19 This is using a map so I'm not sure what you're as
+ const base::Closure& error_cb) {
+ base::AutoLock auto_lock(lock_);
+ DCHECK(error_callbacks_.find(input) == error_callbacks_.end());
+ error_callbacks_[input] = error_cb;
+}
+
+void AudioRendererMixer::UnregisterErrorCallback(
+ AudioConverter::InputCallback* input) {
+ base::AutoLock auto_lock(lock_);
+ DCHECK(error_callbacks_.find(input) != error_callbacks_.end());
+ error_callbacks_.erase(input);
}
int AudioRendererMixer::Render(AudioBus* audio_bus,
int audio_delay_milliseconds) {
- base::AutoLock auto_lock(mixer_inputs_lock_);
+ base::AutoLock auto_lock(lock_);
// If there are no mixer inputs and we haven't seen one for a while, pause the
// sink to avoid wasting resources when media elements are present but remain
// in the pause state.
const base::TimeTicks now = base::TimeTicks::Now();
- if (!mixer_inputs_.empty()) {
+ if (!audio_converter_.empty()) {
last_play_time_ = now;
} else if (now - last_play_time_ >= pause_delay_ && playing_) {
audio_sink_->Pause();
@@ -79,11 +88,13 @@ int AudioRendererMixer::Render(AudioBus* audio_bus,
}
void AudioRendererMixer::OnRenderError() {
- base::AutoLock auto_lock(mixer_inputs_lock_);
+ base::AutoLock auto_lock(lock_);
// Call each mixer input and signal an error.
- for (AudioRendererMixerInputSet::iterator it = mixer_inputs_.begin();
- it != mixer_inputs_.end(); ++it) {
+ for (AudioRendererMixerErrorCallbackMap::iterator it =
+ error_callbacks_.begin();
+ it != error_callbacks_.end();
+ ++it) {
it->second.Run();
}
}
« no previous file with comments | « media/base/audio_renderer_mixer.h ('k') | media/base/audio_renderer_mixer_input.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698