summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/render_view.cc')
-rw-r--r--chrome/renderer/render_view.cc97
1 files changed, 97 insertions, 0 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 10f314d..9528187 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))
@@ -2864,3 +2870,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));
+}