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 |