Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/base/audio_renderer_mixer_input.h" | 5 #include "media/base/audio_renderer_mixer_input.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | |
| 7 #include "base/logging.h" | 8 #include "base/logging.h" |
| 8 #include "media/base/audio_renderer_mixer.h" | 9 #include "media/base/audio_renderer_mixer.h" |
| 9 | 10 |
| 10 namespace media { | 11 namespace media { |
| 11 | 12 |
| 12 AudioRendererMixerInput::AudioRendererMixerInput( | 13 AudioRendererMixerInput::AudioRendererMixerInput( |
| 13 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb) | 14 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb) |
| 14 : playing_(false), | 15 : playing_(false), |
| 15 initialized_(false), | 16 initialized_(false), |
| 16 volume_(1.0f), | 17 volume_(1.0f), |
| 17 get_mixer_cb_(get_mixer_cb), | 18 get_mixer_cb_(get_mixer_cb), |
| 18 remove_mixer_cb_(remove_mixer_cb), | 19 remove_mixer_cb_(remove_mixer_cb), |
| 19 mixer_(NULL), | 20 mixer_(NULL), |
| 20 callback_(NULL), | 21 callback_(NULL), |
| 21 current_audio_delay_milliseconds_(0) { | 22 error_cb_(base::Bind( |
| 23 &AudioRendererMixerInput::OnRenderError, base::Unretained(this))) { | |
| 22 } | 24 } |
| 23 | 25 |
| 24 AudioRendererMixerInput::~AudioRendererMixerInput() { | 26 AudioRendererMixerInput::~AudioRendererMixerInput() { |
| 25 // Mixer is no longer safe to use after |remove_mixer_cb_| has been called. | 27 // Mixer is no longer safe to use after |remove_mixer_cb_| has been called. |
| 26 if (initialized_) | 28 if (initialized_) |
| 27 remove_mixer_cb_.Run(params_); | 29 remove_mixer_cb_.Run(params_); |
| 28 } | 30 } |
| 29 | 31 |
| 30 void AudioRendererMixerInput::Initialize( | 32 void AudioRendererMixerInput::Initialize( |
| 31 const AudioParameters& params, | 33 const AudioParameters& params, |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 51 mixer_->RemoveMixerInput(this); | 53 mixer_->RemoveMixerInput(this); |
| 52 playing_ = false; | 54 playing_ = false; |
| 53 } | 55 } |
| 54 | 56 |
| 55 void AudioRendererMixerInput::Play() { | 57 void AudioRendererMixerInput::Play() { |
| 56 DCHECK(initialized_); | 58 DCHECK(initialized_); |
| 57 | 59 |
| 58 if (playing_) | 60 if (playing_) |
| 59 return; | 61 return; |
| 60 | 62 |
| 61 mixer_->AddMixerInput(this); | 63 mixer_->AddMixerInput(this, error_cb_); |
| 62 playing_ = true; | 64 playing_ = true; |
| 63 } | 65 } |
| 64 | 66 |
| 65 void AudioRendererMixerInput::Pause() { | 67 void AudioRendererMixerInput::Pause() { |
| 66 DCHECK(initialized_); | 68 DCHECK(initialized_); |
| 67 | 69 |
| 68 if (!playing_) | 70 if (!playing_) |
| 69 return; | 71 return; |
| 70 | 72 |
| 71 mixer_->RemoveMixerInput(this); | 73 mixer_->RemoveMixerInput(this); |
| 72 playing_ = false; | 74 playing_ = false; |
| 73 } | 75 } |
| 74 | 76 |
| 75 bool AudioRendererMixerInput::SetVolume(double volume) { | 77 bool AudioRendererMixerInput::SetVolume(double volume) { |
| 76 volume_ = volume; | 78 volume_ = volume; |
| 77 return true; | 79 return true; |
| 78 } | 80 } |
| 79 | 81 |
| 80 double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus, | 82 double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus, |
| 81 base::TimeDelta buffer_delay) { | 83 base::TimeDelta buffer_delay) { |
| 82 int frames_filled = callback_->Render( | 84 int frames_filled = callback_->Render( |
| 83 audio_bus, | 85 audio_bus, buffer_delay.InMillisecondsF() + 0.5); |
|
no longer working on chromium
2013/04/30 08:42:23
nit, this might trigger compiling warning, explici
| |
| 84 current_audio_delay_milliseconds_ + buffer_delay.InMilliseconds()); | |
| 85 | 86 |
| 86 // AudioConverter expects unfilled frames to be zeroed. | 87 // AudioConverter expects unfilled frames to be zeroed. |
| 87 if (frames_filled < audio_bus->frames()) { | 88 if (frames_filled < audio_bus->frames()) { |
| 88 audio_bus->ZeroFramesPartial( | 89 audio_bus->ZeroFramesPartial( |
| 89 frames_filled, audio_bus->frames() - frames_filled); | 90 frames_filled, audio_bus->frames() - frames_filled); |
| 90 } | 91 } |
| 91 | 92 |
| 92 return frames_filled > 0 ? volume_ : 0; | 93 return frames_filled > 0 ? volume_ : 0; |
| 93 } | 94 } |
| 94 | 95 |
| 95 void AudioRendererMixerInput::OnRenderError() { | 96 void AudioRendererMixerInput::OnRenderError() { |
| 96 callback_->OnRenderError(); | 97 callback_->OnRenderError(); |
| 97 } | 98 } |
| 98 | 99 |
| 99 } // namespace media | 100 } // namespace media |
| OLD | NEW |