summaryrefslogtreecommitdiffstats
path: root/webkit/media
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-06 07:59:09 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-06 07:59:09 +0000
commitf84a2e2a4e478e6e372b83c899a4f3f445cdd35e (patch)
tree7d3e63e9bdd7b58b3b2812bfcaf46456cb650473 /webkit/media
parent1bfa0ec1269ce7fedf37d665f4972f4faf052b45 (diff)
downloadchromium_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.cc10
-rw-r--r--webkit/media/webaudiosourceprovider_impl_unittest.cc9
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);