| 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/multi_channel_resampler.h" | 5 #include "media/base/multi_channel_resampler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/memory/ptr_util.h" |
| 12 #include "media/base/audio_bus.h" | 13 #include "media/base/audio_bus.h" |
| 13 | 14 |
| 14 namespace media { | 15 namespace media { |
| 15 | 16 |
| 16 MultiChannelResampler::MultiChannelResampler(int channels, | 17 MultiChannelResampler::MultiChannelResampler(int channels, |
| 17 double io_sample_rate_ratio, | 18 double io_sample_rate_ratio, |
| 18 size_t request_size, | 19 size_t request_size, |
| 19 const ReadCB& read_cb) | 20 const ReadCB& read_cb) |
| 20 : read_cb_(read_cb), | 21 : read_cb_(read_cb), |
| 21 wrapped_resampler_audio_bus_(AudioBus::CreateWrapper(channels)), | 22 wrapped_resampler_audio_bus_(AudioBus::CreateWrapper(channels)), |
| 22 output_frames_ready_(0) { | 23 output_frames_ready_(0) { |
| 23 // Allocate each channel's resampler. | 24 // Allocate each channel's resampler. |
| 24 resamplers_.reserve(channels); | 25 resamplers_.reserve(channels); |
| 25 for (int i = 0; i < channels; ++i) { | 26 for (int i = 0; i < channels; ++i) { |
| 26 resamplers_.push_back(new SincResampler( | 27 resamplers_.push_back(base::MakeUnique<SincResampler>( |
| 27 io_sample_rate_ratio, request_size, base::Bind( | 28 io_sample_rate_ratio, request_size, |
| 28 &MultiChannelResampler::ProvideInput, base::Unretained(this), i))); | 29 base::Bind(&MultiChannelResampler::ProvideInput, base::Unretained(this), |
| 30 i))); |
| 29 } | 31 } |
| 30 | 32 |
| 31 // Setup the wrapped AudioBus for channel data. | 33 // Setup the wrapped AudioBus for channel data. |
| 32 wrapped_resampler_audio_bus_->set_frames(request_size); | 34 wrapped_resampler_audio_bus_->set_frames(request_size); |
| 33 | 35 |
| 34 // Allocate storage for all channels except the first, which will use the | 36 // Allocate storage for all channels except the first, which will use the |
| 35 // |destination| provided to ProvideInput() directly. | 37 // |destination| provided to ProvideInput() directly. |
| 36 if (channels > 1) { | 38 if (channels > 1) { |
| 37 resampler_audio_bus_ = AudioBus::Create(channels - 1, request_size); | 39 resampler_audio_bus_ = AudioBus::Create(channels - 1, request_size); |
| 38 for (int i = 0; i < resampler_audio_bus_->channels(); ++i) { | 40 for (int i = 0; i < resampler_audio_bus_->channels(); ++i) { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 return resamplers_[0]->BufferedFrames(); | 123 return resamplers_[0]->BufferedFrames(); |
| 122 } | 124 } |
| 123 | 125 |
| 124 void MultiChannelResampler::PrimeWithSilence() { | 126 void MultiChannelResampler::PrimeWithSilence() { |
| 125 DCHECK(!resamplers_.empty()); | 127 DCHECK(!resamplers_.empty()); |
| 126 for (size_t i = 0; i < resamplers_.size(); ++i) | 128 for (size_t i = 0; i < resamplers_.size(); ++i) |
| 127 resamplers_[i]->PrimeWithSilence(); | 129 resamplers_[i]->PrimeWithSilence(); |
| 128 } | 130 } |
| 129 | 131 |
| 130 } // namespace media | 132 } // namespace media |
| OLD | NEW |