Index: chrome/renderer/render_view.cc |
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc |
index 4fa5bdf89fd85de3e59e3e3fdfe29fc12b325ca6..4c38d920d0be4d0e8484e039f5693bdfc4d9bbf8 100644 |
--- a/chrome/renderer/render_view.cc |
+++ b/chrome/renderer/render_view.cc |
@@ -26,6 +26,7 @@ |
#include "chrome/renderer/about_handler.h" |
#include "chrome/renderer/debug_message_handler.h" |
#include "chrome/renderer/localized_error.h" |
+#include "chrome/renderer/media/audio_renderer_impl.h" |
#include "chrome/renderer/render_process.h" |
#include "chrome/renderer/user_script_slave.h" |
#include "chrome/renderer/visitedlink_slave.h" |
@@ -408,6 +409,11 @@ void RenderView::OnMessageReceived(const IPC::Message& message) { |
OnReceivedAutofillSuggestions) |
IPC_MESSAGE_HANDLER(ViewMsg_PopupNotificationVisiblityChanged, |
OnPopupNotificationVisiblityChanged) |
+ IPC_MESSAGE_HANDLER(ViewMsg_RequestAudioPacket, OnRequestAudioPacket) |
+ IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamCreated, OnAudioStreamCreated) |
+ IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamStateChanged, |
+ OnAudioStreamStateChanged) |
+ IPC_MESSAGE_HANDLER(ViewMsg_NotifyAudioStreamVolume, OnAudioStreamVolume) |
// Have the super handle all other messages. |
IPC_MESSAGE_UNHANDLED(RenderWidget::OnMessageReceived(message)) |
@@ -2863,3 +2869,94 @@ MessageLoop* RenderView::GetMessageLoopForIO() { |
return g_render_thread->owner_loop(); |
return NULL; |
} |
+ |
+void RenderView::OnRequestAudioPacket(int stream_id) { |
+ AudioRendererImpl* audio_renderer = audio_renderers_.Lookup(stream_id); |
+ if (!audio_renderer){ |
+ NOTREACHED(); |
+ return; |
+ } |
+ audio_renderer->OnRequestPacket(); |
+} |
+ |
+void RenderView::OnAudioStreamCreated( |
+ int stream_id, base::SharedMemoryHandle handle, int length) { |
+ AudioRendererImpl* audio_renderer = audio_renderers_.Lookup(stream_id); |
+ if (!audio_renderer){ |
+ NOTREACHED(); |
+ return; |
+ } |
+ audio_renderer->OnCreated(handle, length); |
+} |
+ |
+void RenderView::OnAudioStreamStateChanged( |
+ int stream_id, AudioOutputStream::State state, int info) { |
+ AudioRendererImpl* audio_renderer = audio_renderers_.Lookup(stream_id); |
+ if (!audio_renderer){ |
+ NOTREACHED(); |
+ return; |
+ } |
+ audio_renderer->OnStateChanged(state, info); |
+} |
+ |
+void RenderView::OnAudioStreamVolume(int stream_id, double left, double right) { |
+ AudioRendererImpl* audio_renderer = audio_renderers_.Lookup(stream_id); |
+ if (!audio_renderer){ |
+ NOTREACHED(); |
+ return; |
+ } |
+ audio_renderer->OnVolume(left, right); |
+} |
+ |
+int32 RenderView::CreateAudioStream(AudioRendererImpl* audio_renderer, |
+ AudioManager::Format format, int channels, |
+ int sample_rate, int bits_per_sample, |
+ size_t packet_size) { |
+ // TODO(hclam): make sure this method is called on render thread. |
+ // Loop through the map and make sure there's no renderer already in the map. |
+ for (IDMap<AudioRendererImpl>::const_iterator iter = audio_renderers_.begin(); |
+ iter != audio_renderers_.end(); ++iter) { |
+ DCHECK(iter->second != audio_renderer); |
+ } |
+ |
+ // Add to map and send the IPC to browser process. |
+ int32 stream_id = audio_renderers_.Add(audio_renderer); |
+ ViewHostMsg_Audio_CreateStream params; |
+ params.format = format; |
+ params.channels = channels; |
+ params.sample_rate = sample_rate; |
+ params.bits_per_sample = bits_per_sample; |
+ params.packet_size = packet_size; |
+ Send(new ViewHostMsg_CreateAudioStream(routing_id_, stream_id, params)); |
+ return stream_id; |
+} |
+ |
+void RenderView::StartAudioStream(int stream_id) { |
+ // TODO(hclam): make sure this method is called on render thread. |
+ DCHECK(audio_renderers_.Lookup(stream_id) != NULL); |
+ Send(new ViewHostMsg_StartAudioStream(routing_id_, stream_id)); |
+} |
+ |
+void RenderView::CloseAudioStream(int stream_id) { |
+ // TODO(hclam): make sure this method is called on render thread. |
+ DCHECK(audio_renderers_.Lookup(stream_id) != NULL); |
+ Send(new ViewHostMsg_CloseAudioStream(routing_id_, stream_id)); |
+} |
+ |
+void RenderView::NotifyAudioPacketReady(int stream_id) { |
+ // TODO(hclam): make sure this method is called on render thread. |
+ DCHECK(audio_renderers_.Lookup(stream_id) != NULL); |
+ Send(new ViewHostMsg_NotifyAudioPacketReady(routing_id_, stream_id)); |
+} |
+ |
+void RenderView::GetAudioVolume(int stream_id) { |
+ // TODO(hclam): make sure this method is called on render thread. |
+ DCHECK(audio_renderers_.Lookup(stream_id) != NULL); |
+ Send(new ViewHostMsg_GetAudioVolume(routing_id_, stream_id)); |
+} |
+ |
+void RenderView::SetAudioVolume(int stream_id, double left, double right) { |
+ // TODO(hclam): make sure this method is called on render thread. |
+ DCHECK(audio_renderers_.Lookup(stream_id) != NULL); |
+ Send(new ViewHostMsg_SetAudioVolume(routing_id_, stream_id, left, right)); |
+} |