diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-06 07:59:09 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-06 07:59:09 +0000 |
commit | f84a2e2a4e478e6e372b83c899a4f3f445cdd35e (patch) | |
tree | 7d3e63e9bdd7b58b3b2812bfcaf46456cb650473 /webkit/media | |
parent | 1bfa0ec1269ce7fedf37d665f4972f4faf052b45 (diff) | |
download | chromium_src-f84a2e2a4e478e6e372b83c899a4f3f445cdd35e.zip chromium_src-f84a2e2a4e478e6e372b83c899a4f3f445cdd35e.tar.gz chromium_src-f84a2e2a4e478e6e372b83c899a4f3f445cdd35e.tar.bz2 |
Move AudioBus creation into provideInput().
Looks like provideInput() may be called prior to initialize, so we
need to move the construction to provideInput().
BUG=237678
TEST=new content_unittest.
Review URL: https://chromiumcodereview.appspot.com/14890003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@198409 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media')
-rw-r--r-- | webkit/media/webaudiosourceprovider_impl.cc | 10 | ||||
-rw-r--r-- | webkit/media/webaudiosourceprovider_impl_unittest.cc | 9 |
2 files changed, 13 insertions, 6 deletions
diff --git a/webkit/media/webaudiosourceprovider_impl.cc b/webkit/media/webaudiosourceprovider_impl.cc index 4829967..874f1f6 100644 --- a/webkit/media/webaudiosourceprovider_impl.cc +++ b/webkit/media/webaudiosourceprovider_impl.cc @@ -87,8 +87,11 @@ void WebAudioSourceProviderImpl::setClient( void WebAudioSourceProviderImpl::provideInput( const WebVector<float*>& audio_data, size_t number_of_frames) { - DCHECK(renderer_); - DCHECK_EQ(static_cast<size_t>(bus_wrapper_->channels()), audio_data.size()); + if (!bus_wrapper_ || + static_cast<size_t>(bus_wrapper_->channels()) != audio_data.size()) { + bus_wrapper_ = media::AudioBus::CreateWrapper(audio_data.size()); + } + bus_wrapper_->set_frames(number_of_frames); for (size_t i = 0; i < audio_data.size(); ++i) bus_wrapper_->SetChannelData(i, audio_data[i]); @@ -102,7 +105,9 @@ void WebAudioSourceProviderImpl::provideInput( return; } + DCHECK(renderer_); DCHECK(client_); + DCHECK_EQ(channels_, bus_wrapper_->channels()); renderer_->Render(bus_wrapper_.get(), 0); bus_wrapper_->Scale(volume_); } @@ -159,7 +164,6 @@ void WebAudioSourceProviderImpl::Initialize( // Keep track of the format in case the client hasn't yet been set. channels_ = params.channels(); sample_rate_ = params.sample_rate(); - bus_wrapper_ = media::AudioBus::CreateWrapper(channels_); if (client_) { // Inform WebKit about the audio stream format. diff --git a/webkit/media/webaudiosourceprovider_impl_unittest.cc b/webkit/media/webaudiosourceprovider_impl_unittest.cc index 4202383..12a9a6c 100644 --- a/webkit/media/webaudiosourceprovider_impl_unittest.cc +++ b/webkit/media/webaudiosourceprovider_impl_unittest.cc @@ -88,9 +88,6 @@ class WebAudioSourceProviderImplTest DISALLOW_COPY_AND_ASSIGN(WebAudioSourceProviderImplTest); }; -// test start/stop/play/pause all return either silence or real audio data. -// test setVolume results in volume adjustment - TEST_F(WebAudioSourceProviderImplTest, SetClientBeforeInitialize) { // setClient() with a NULL client should do nothing if no client is set. wasp_impl_->setClient(NULL); @@ -160,6 +157,12 @@ TEST_F(WebAudioSourceProviderImplTest, ProvideInput) { for (size_t i = 0; i < audio_data.size(); ++i) audio_data[i] = bus1->channel(i); + // Verify provideInput() works before Initialize() and returns silence. + bus1->channel(0)[0] = 1; + bus2->Zero(); + wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); + ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); + wasp_impl_->Initialize(params_, &fake_callback_); SetClient(this); |