summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorhenrika <henrika@chromium.org>2015-07-09 04:09:38 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-09 11:10:10 +0000
commitfd4c2189c51bfad5d6f0be146b1d0ad0a6f50022 (patch)
tree9df281ef963df8887855960f7b2022c191d73164 /media
parent0a477a9f9d95fd37fa3d7563c0c10b64152944d0 (diff)
downloadchromium_src-fd4c2189c51bfad5d6f0be146b1d0ad0a6f50022.zip
chromium_src-fd4c2189c51bfad5d6f0be146b1d0ad0a6f50022.tar.gz
chromium_src-fd4c2189c51bfad5d6f0be146b1d0ad0a6f50022.tar.bz2
Fixes issue where Web Speech API drops a frame every 5.1 seconds
TBR=tommi BUG=506051 TEST=content_unittests --gtest_filter=Speech* and manual testing using https://www.google.com/intl/en/chrome/demos/speech.html Verified 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000 and 192000 as native input sample rate. Review URL: https://codereview.chromium.org/1211203006 Cr-Commit-Position: refs/heads/master@{#338013}
Diffstat (limited to 'media')
-rw-r--r--media/base/audio_converter.cc6
-rw-r--r--media/base/audio_converter.h3
-rw-r--r--media/base/multi_channel_resampler.cc5
-rw-r--r--media/base/multi_channel_resampler.h3
4 files changed, 17 insertions, 0 deletions
diff --git a/media/base/audio_converter.cc b/media/base/audio_converter.cc
index be68ac6..4868604 100644
--- a/media/base/audio_converter.cc
+++ b/media/base/audio_converter.cc
@@ -117,6 +117,12 @@ int AudioConverter::ChunkSize() const {
return resampler_->ChunkSize();
}
+void AudioConverter::PrimeWithSilence() {
+ if (resampler_) {
+ resampler_->PrimeWithSilence();
+ }
+}
+
void AudioConverter::ConvertWithDelay(const base::TimeDelta& initial_delay,
AudioBus* dest) {
initial_delay_ = initial_delay;
diff --git a/media/base/audio_converter.h b/media/base/audio_converter.h
index b12dcb9..0b546dc 100644
--- a/media/base/audio_converter.h
+++ b/media/base/audio_converter.h
@@ -90,6 +90,9 @@ class MEDIA_EXPORT AudioConverter {
// to each input's ProvideInput for more data.
int ChunkSize() const;
+ // See SincResampler::PrimeWithSilence.
+ void PrimeWithSilence();
+
bool empty() const { return transform_inputs_.empty(); }
private:
diff --git a/media/base/multi_channel_resampler.cc b/media/base/multi_channel_resampler.cc
index b0ab88d..4ec44d8 100644
--- a/media/base/multi_channel_resampler.cc
+++ b/media/base/multi_channel_resampler.cc
@@ -119,5 +119,10 @@ double MultiChannelResampler::BufferedFrames() const {
return resamplers_[0]->BufferedFrames();
}
+void MultiChannelResampler::PrimeWithSilence() {
+ DCHECK(!resamplers_.empty());
+ for (size_t i = 0; i < resamplers_.size(); ++i)
+ resamplers_[i]->PrimeWithSilence();
+}
} // namespace media
diff --git a/media/base/multi_channel_resampler.h b/media/base/multi_channel_resampler.h
index 84fa9fe..690f750 100644
--- a/media/base/multi_channel_resampler.h
+++ b/media/base/multi_channel_resampler.h
@@ -54,6 +54,9 @@ class MEDIA_EXPORT MultiChannelResampler {
// See SincResampler::BufferedFrames.
double BufferedFrames() const;
+ // See SincResampler::PrimeWithSilence.
+ void PrimeWithSilence();
+
private:
// SincResampler::ReadCB implementation. ProvideInput() will be called for
// each channel (in channel order) as SincResampler needs more data.