Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: content/renderer/media/media_stream_dispatcher.cc

Issue 7184010: MediaStreamDispatcher (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/media_stream_dispatcher.h"
6
7 #include "base/logging.h"
8 #include "content/common/media/media_stream_messages.h"
9 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
10
11 // Empty StreamDeviceInfoArray.
12 static const media_stream::StreamDeviceInfoArray empty_stream_array =
scherkus (not reviewing) 2011/06/17 17:42:13 no good -- we avoid static non-basic data types (i
Per K 2011/06/18 19:53:59 removed.
13 media_stream::StreamDeviceInfoArray(0);
14
15 MediaStreamDispatcherEventHandler::~MediaStreamDispatcherEventHandler() {}
16
17 MediaStreamDispatcher::MediaStreamDispatcher(RenderView* render_view)
18 : RenderViewObserver(render_view),
19 next_ipc_id_(0),
20 message_loop_(MessageLoop::current()) {
21 }
22
23 MediaStreamDispatcher::~MediaStreamDispatcher() {}
24
25 void MediaStreamDispatcher::GenerateStream(
26 int request_id,
27 MediaStreamDispatcherEventHandler* event_handler,
28 media_stream::GenerateStreamOptions components,
29 const std::string& security_origin) {
30 DCHECK_EQ(MessageLoop::current(), message_loop_);
31 VLOG(1) << "MediaStreamDispatcher::GenerateStream" << request_id << ")";
scherkus (not reviewing) 2011/06/17 17:42:13 nit: you're missing a ( in your log message
Per K 2011/06/18 19:53:59 Done.
32
33 requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
scherkus (not reviewing) 2011/06/17 17:42:13 what purpose does next_ipd_id_ serve? I don't see
Per K 2011/06/18 19:53:59 Send(new MediaStreamHostMsg_GenerateStream(routing
34 Send(new MediaStreamHostMsg_GenerateStream(routing_id(),
35 next_ipc_id_++,
36 components,
37 security_origin));
38 }
39
40 void MediaStreamDispatcher::StopStream(const std::string &label) {
41 DCHECK_EQ(MessageLoop::current(), message_loop_);
42 VLOG(1) << "MediaStreamDispatcher::StopStream"
43 << ", {label = " << label;
scherkus (not reviewing) 2011/06/17 17:42:13 nit: you're not closing your { in your log message
Per K 2011/06/18 19:53:59 Done.
44
45 LabelStreamMap::iterator it = label_stream_map_.find(label);
46 if (it == label_stream_map_.end())
47 return;
48
49 Send(new MediaStreamHostMsg_StopGeneratedStream(routing_id(), label));
50 label_stream_map_.erase(it);
51 }
52
53 bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) {
54 bool handled = true;
55 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcher, message)
56 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated,
57 OnStreamGenerated)
58 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed,
59 OnStreamGenerationFailed)
60 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_VideoDeviceFailed,
61 OnVideoDeviceFailed)
62 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_AudioDeviceFailed,
63 OnAudioDeviceFailed)
64 IPC_MESSAGE_UNHANDLED(handled = false)
65 IPC_END_MESSAGE_MAP()
66 return handled;
67 }
68
69 void MediaStreamDispatcher::OnStreamGenerated(
70 int request_id,
71 const std::string& label,
72 const media_stream::StreamDeviceInfoArray& audio_array,
73 const media_stream::StreamDeviceInfoArray& video_array) {
74
75 for (RequestList::iterator it = requests_.begin();
76 it != requests_.end(); ++it) {
77 Request& request = *it;
78 if (request.ipc_request == request_id) {
79 Stream new_stream;
80 new_stream.handler = request.handler;
81 new_stream.audio_array = audio_array;
82 new_stream.video_array = video_array;
83 label_stream_map_[label] = new_stream;
84 request.handler->OnStreamGenerated(request.request_id, label,
85 audio_array, video_array);
86 VLOG(1) << "MediaStreamDispatcher::OnStreamGenerated("
87 << request.request_id << ", " << label << ")";
88 requests_.erase(it);
89 break;
90 }
91 }
92 }
93
94 void MediaStreamDispatcher::OnStreamGenerationFailed(int request_id) {
95 for (RequestList::iterator it = requests_.begin();
96 it != requests_.end(); ++it) {
97 Request& request = *it;
scherkus (not reviewing) 2011/06/17 17:42:13 nit: remove extra space
Per K 2011/06/18 19:53:59 Done.
98 if (request.ipc_request == request_id) {
99 request.handler->OnStreamGenerationFailed(request.request_id);
100 VLOG(1) << "MediaStreamDispatcher::OnStreamGenerationFailed("
101 << request.request_id << ")\n";
102 requests_.erase(it);
103 break;
104 }
105 }
106 }
107
108 void MediaStreamDispatcher::OnVideoDeviceFailed(const std::string& label,
109 int index) {
110 LabelStreamMap::iterator it = label_stream_map_.find(label);
111 if (it == label_stream_map_.end())
112 return;
113
114 // index is the index in the video_array that have failed.
115 DCHECK_GT(it->second.video_array.size(), static_cast<size_t>(index));
116 media_stream::StreamDeviceInfoArray::iterator device_it =
117 it->second.video_array.begin();
118 it->second.video_array.erase(device_it + index);
119 it->second.handler->OnVideoDeviceFailed(label, index);
120 }
121
122 void MediaStreamDispatcher::OnAudioDeviceFailed(const std::string& label,
123 int index) {
124 LabelStreamMap::iterator it = label_stream_map_.find(label);
125 if (it == label_stream_map_.end())
126 return;
127
128 // index is the index in the audio_array that have failed.
129 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index));
130 media_stream::StreamDeviceInfoArray::iterator device_it =
131 it->second.audio_array.begin();
132 it->second.audio_array.erase(device_it + index);
133 it->second.handler->OnAudioDeviceFailed(label, index);
134 }
135
136 const media_stream::StreamDeviceInfoArray&
137 MediaStreamDispatcher::audio_device_array(const std::string& label) {
138 DCHECK_EQ(MessageLoop::current(), message_loop_);
139 if (label.empty())
140 return empty_stream_array;
141
142 if (label_stream_map_.find(label) == label_stream_map_.end())
143 return empty_stream_array;
144
145 return label_stream_map_[label].audio_array;
146 }
147
148 const media_stream::StreamDeviceInfoArray&
149 MediaStreamDispatcher::video_device_array(const std::string& label) {
150 DCHECK_EQ(MessageLoop::current(), message_loop_);
151 if (label.empty())
152 return empty_stream_array;
153
154 if (label_stream_map_.find(label) == label_stream_map_.end())
155 return empty_stream_array;
156
157 return label_stream_map_[label].video_array;
158 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698