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

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: Cleanup. Created 7 years, 8 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') | media/base/audio_converter_unittest.cc » ('J')
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 151d88d781aa59e39dc0066d2b77cc02b39241f9..811913518d71ac0b6620e46f1e2495ed7e90446c 100644
--- a/media/base/audio_converter.cc
+++ b/media/base/audio_converter.cc
@@ -50,12 +50,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::kDefaultBlockSize :
+ 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))));
}
@@ -66,14 +68,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 buffer 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(
« no previous file with comments | « no previous file | media/base/audio_converter_unittest.cc » ('j') | media/base/audio_converter_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698