diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-05-13 16:52:09 +0100 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-05-13 16:52:09 +0100 |
commit | b2df76ea8fec9e32f6f3718986dba0d95315b29c (patch) | |
tree | 0182623e854b794f7307829abf4be16435a0193a /media/base/audio_converter.cc | |
parent | 121d6d4bf5931d9b1dbc0b9a262f6c609440f6c7 (diff) | |
download | chromium_org-b2df76ea8fec9e32f6f3718986dba0d95315b29c.tar.gz |
Merge from Chromium at DEPS revision r199464
This commit was generated by merge_to_master.py.
Change-Id: Ic3d1f97a4fb4edd1e6ed66a70b5040da1622b5a9
Diffstat (limited to 'media/base/audio_converter.cc')
-rw-r--r-- | media/base/audio_converter.cc | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/media/base/audio_converter.cc b/media/base/audio_converter.cc index 7ffc9aea4a..d7c09f795a 100644 --- a/media/base/audio_converter.cc +++ b/media/base/audio_converter.cc @@ -56,12 +56,14 @@ AudioConverter::AudioConverter(const AudioParameters& input_params, if (input_params.sample_rate() != output_params.sample_rate()) { DVLOG(1) << "Resampling from " << input_params.sample_rate() << " to " << output_params.sample_rate(); - double io_sample_rate_ratio = input_params.sample_rate() / + const double io_sample_rate_ratio = input_params.sample_rate() / static_cast<double>(output_params.sample_rate()); + const int request_size = disable_fifo ? SincResampler::kDefaultRequestSize : + input_params.frames_per_buffer(); resampler_.reset(new MultiChannelResampler( downmix_early_ ? output_params.channels() : input_params.channels(), - io_sample_rate_ratio, base::Bind( + io_sample_rate_ratio, request_size, base::Bind( &AudioConverter::ProvideInput, base::Unretained(this)))); } @@ -72,14 +74,15 @@ AudioConverter::AudioConverter(const AudioParameters& input_params, base::Time::kMicrosecondsPerSecond / static_cast<double>(output_params.sample_rate())); - if (disable_fifo) + // The resampler can be configured to work with a specific request size, so a + // FIFO is not necessary when resampling. + if (disable_fifo || resampler_) return; - // Since the resampler / output device may want a different buffer size than - // the caller asked for, we need to use a FIFO to ensure that both sides - // read in chunk sizes they're configured for. - if (resampler_.get() || - input_params.frames_per_buffer() != output_params.frames_per_buffer()) { + // Since the output device may want a different buffer size than the caller + // asked for, we need to use a FIFO to ensure that both sides read in chunk + // sizes they're configured for. + if (input_params.frames_per_buffer() != output_params.frames_per_buffer()) { DVLOG(1) << "Rebuffering from " << input_params.frames_per_buffer() << " to " << output_params.frames_per_buffer(); audio_fifo_.reset(new AudioPullFifo( @@ -141,7 +144,7 @@ void AudioConverter::ConvertWithDelay(const base::TimeDelta& initial_delay, SourceCallback(0, temp_dest); } else { if (resampler_) - resampler_->Resample(temp_dest, temp_dest->frames()); + resampler_->Resample(temp_dest->frames(), temp_dest); else ProvideInput(0, temp_dest); } |