| 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/logging.h" | 7 #include "base/logging.h" |
| 8 #include "media/base/audio_renderer_mixer.h" | 8 #include "media/base/audio_renderer_mixer.h" |
| 9 | 9 |
| 10 namespace media { | 10 namespace media { |
| 11 | 11 |
| 12 AudioRendererMixerInput::AudioRendererMixerInput( | 12 AudioRendererMixerInput::AudioRendererMixerInput( |
| 13 const scoped_refptr<AudioRendererMixer>& mixer) | 13 const GetMixerCB& get_mixer_cb, const RemoveMixerCB& remove_mixer_cb) |
| 14 : playing_(false), | 14 : playing_(false), |
| 15 initialized_(false), | 15 initialized_(false), |
| 16 volume_(1.0f), | 16 volume_(1.0f), |
| 17 mixer_(mixer), | 17 get_mixer_cb_(get_mixer_cb), |
| 18 remove_mixer_cb_(remove_mixer_cb), |
| 18 callback_(NULL) { | 19 callback_(NULL) { |
| 19 } | 20 } |
| 20 | 21 |
| 21 AudioRendererMixerInput::~AudioRendererMixerInput() { | 22 AudioRendererMixerInput::~AudioRendererMixerInput() { |
| 22 if (!initialized_) | 23 remove_mixer_cb_.Run(params_); |
| 23 return; | |
| 24 | |
| 25 // Clean up |audio_data_|. | |
| 26 for (size_t i = 0; i < audio_data_.size(); ++i) | |
| 27 delete [] audio_data_[i]; | |
| 28 audio_data_.clear(); | |
| 29 } | 24 } |
| 30 | 25 |
| 31 void AudioRendererMixerInput::Initialize( | 26 void AudioRendererMixerInput::Initialize( |
| 32 const AudioParameters& params, | 27 const AudioParameters& params, |
| 33 AudioRendererSink::RenderCallback* callback) { | 28 AudioRendererSink::RenderCallback* callback) { |
| 34 DCHECK(!initialized_); | 29 DCHECK(!initialized_); |
| 35 | 30 params_ = params; |
| 36 // TODO(dalecurtis): If we switch to AVX/SSE optimization, we'll need to | 31 mixer_ = get_mixer_cb_.Run(params_); |
| 37 // allocate these on 32-byte boundaries and ensure they're sized % 32 bytes. | |
| 38 audio_data_.reserve(params.channels()); | |
| 39 for (int i = 0; i < params.channels(); ++i) | |
| 40 audio_data_.push_back(new float[params.frames_per_buffer()]); | |
| 41 | |
| 42 callback_ = callback; | 32 callback_ = callback; |
| 43 initialized_ = true; | 33 initialized_ = true; |
| 44 } | 34 } |
| 45 | 35 |
| 46 void AudioRendererMixerInput::Start() { | 36 void AudioRendererMixerInput::Start() { |
| 47 DCHECK(initialized_); | 37 DCHECK(initialized_); |
| 48 mixer_->AddMixerInput(this); | 38 mixer_->AddMixerInput(this); |
| 49 } | 39 } |
| 50 | 40 |
| 51 void AudioRendererMixerInput::Stop() { | 41 void AudioRendererMixerInput::Stop() { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 67 bool AudioRendererMixerInput::SetVolume(double volume) { | 57 bool AudioRendererMixerInput::SetVolume(double volume) { |
| 68 volume_ = volume; | 58 volume_ = volume; |
| 69 return true; | 59 return true; |
| 70 } | 60 } |
| 71 | 61 |
| 72 void AudioRendererMixerInput::GetVolume(double* volume) { | 62 void AudioRendererMixerInput::GetVolume(double* volume) { |
| 73 *volume = volume_; | 63 *volume = volume_; |
| 74 } | 64 } |
| 75 | 65 |
| 76 } // namespace media | 66 } // namespace media |
| OLD | NEW |