Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(365)

Unified Diff: media/base/audio_converter.cc

Issue 14189035: Reduce jitter from uneven SincResampler buffer size requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | media/base/audio_converter_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/audio_converter.cc
diff --git a/media/base/audio_converter.cc b/media/base/audio_converter.cc
index 7ffc9aea4a83e28fcc6bf662ecc965500d62518c..d7c09f795a67fdfeafab5bbb2b4b6f75d92dd0e8 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);
}
« no previous file with comments | « no previous file | media/base/audio_converter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698