summaryrefslogtreecommitdiff
path: root/media/base/audio_converter.cc
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-05-13 16:52:09 +0100
committerTorne (Richard Coles) <torne@google.com>2013-05-13 16:52:09 +0100
commitb2df76ea8fec9e32f6f3718986dba0d95315b29c (patch)
tree0182623e854b794f7307829abf4be16435a0193a /media/base/audio_converter.cc
parent121d6d4bf5931d9b1dbc0b9a262f6c609440f6c7 (diff)
downloadchromium_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.cc21
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);
}