diff options
author | henrika <henrika@chromium.org> | 2015-07-09 04:09:38 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-09 11:10:10 +0000 |
commit | fd4c2189c51bfad5d6f0be146b1d0ad0a6f50022 (patch) | |
tree | 9df281ef963df8887855960f7b2022c191d73164 /media | |
parent | 0a477a9f9d95fd37fa3d7563c0c10b64152944d0 (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | media/base/audio_converter.h | 3 | ||||
-rw-r--r-- | media/base/multi_channel_resampler.cc | 5 | ||||
-rw-r--r-- | media/base/multi_channel_resampler.h | 3 |
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. |