Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index de604b1ed103c79b921a8d9be6106a154c4bd72f..a144ebca390b906132d03edfe900f212f98c80e6 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -76,6 +76,7 @@ |
#include "content/renderer/media/render_audiosourceprovider.h" |
#include "content/renderer/media/render_media_log.h" |
#include "content/renderer/media/renderer_gpu_video_decoder_factories.h" |
+#include "content/renderer/media/renderer_webaudiodevice_impl.h" |
#include "content/renderer/mhtml_generator.h" |
#include "content/renderer/notification_provider.h" |
#include "content/renderer/p2p/socket_dispatcher.h" |
@@ -2366,7 +2367,7 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer( |
if (!cmd_line->HasSwitch(switches::kDisableAudio)) { |
// audio_source_provider is a "provider" to WebKit, and a sink |
// from the perspective of the audio renderer. |
- audio_source_provider = new RenderAudioSourceProvider(); |
+ audio_source_provider = new RenderAudioSourceProvider(routing_id_); |
// Add the chrome specific audio renderer, using audio_source_provider |
// as the sink. |
@@ -2426,6 +2427,58 @@ WebApplicationCacheHost* RenderViewImpl::createApplicationCacheHost( |
RenderThreadImpl::current()->appcache_dispatcher()->backend_proxy()); |
} |
+ |
+WebKit::WebAudioDevice* |
+RenderViewImpl::createAudioDevice( |
+ size_t bufferSize, |
+ unsigned numberOfChannels, |
+ double sampleRate, |
+ WebKit::WebAudioDevice::RenderCallback* callback) { |
+ ChannelLayout layout = CHANNEL_LAYOUT_UNSUPPORTED; |
+ |
+ // The |numberOfChannels| does not exactly identify the channel layout of the |
+ // device. The switch statement below assigns a best guess to the channel |
+ // layout based on number of channels. |
+ // TODO(crogers): WebKit should give the channel layout instead of the hard |
+ // channel count. See http://crbug.com/139882. |
+ switch (numberOfChannels) { |
+ case 1: |
+ layout = CHANNEL_LAYOUT_MONO; |
+ break; |
+ case 2: |
+ layout = CHANNEL_LAYOUT_STEREO; |
+ break; |
+ case 3: |
+ layout = CHANNEL_LAYOUT_2_1; |
+ break; |
+ case 4: |
+ layout = CHANNEL_LAYOUT_4_0; |
+ break; |
+ case 5: |
+ layout = CHANNEL_LAYOUT_5_0; |
+ break; |
+ case 6: |
+ layout = CHANNEL_LAYOUT_5_1; |
+ break; |
+ case 7: |
+ layout = CHANNEL_LAYOUT_7_0; |
+ break; |
+ case 8: |
+ layout = CHANNEL_LAYOUT_7_1; |
+ break; |
+ default: |
+ layout = CHANNEL_LAYOUT_STEREO; |
+ break; |
+ } |
+ |
+ media::AudioParameters params( |
+ media::AudioParameters::AUDIO_PCM_LOW_LATENCY, layout, |
+ static_cast<int>(sampleRate), 16, bufferSize); |
+ |
+ return new RendererWebAudioDeviceImpl( |
+ routing_id_, params, callback); |
+} |
+ |
WebCookieJar* RenderViewImpl::cookieJar(WebFrame* frame) { |
return &cookie_jar_; |
} |