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

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

Issue 8480028: support video device enumeration from renderer process. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: code review Created 9 years 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/media_stream_dispatcher.h" 5 #include "content/renderer/media/media_stream_dispatcher.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/common/media/media_stream_messages.h" 8 #include "content/common/media/media_stream_messages.h"
9 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h" 9 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
10 #include "content/renderer/render_view_impl.h" 10 #include "content/renderer/render_view_impl.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 << ", {label = " << label << "}"; 58 << ", {label = " << label << "}";
59 59
60 LabelStreamMap::iterator it = label_stream_map_.find(label); 60 LabelStreamMap::iterator it = label_stream_map_.find(label);
61 if (it == label_stream_map_.end()) 61 if (it == label_stream_map_.end())
62 return; 62 return;
63 63
64 Send(new MediaStreamHostMsg_StopGeneratedStream(routing_id(), label)); 64 Send(new MediaStreamHostMsg_StopGeneratedStream(routing_id(), label));
65 label_stream_map_.erase(it); 65 label_stream_map_.erase(it);
66 } 66 }
67 67
68 void MediaStreamDispatcher::EnumerateDevices(
69 int request_id,
70 MediaStreamDispatcherEventHandler* event_handler,
71 media_stream::MediaStreamType type,
72 const std::string& security_origin) {
73 DVLOG(1) << "MediaStreamDispatcher::EnumerateDevices("
74 << request_id << ")";
75
76 requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
77 Send(new MediaStreamHostMsg_EnumerateDevices(routing_id(),
78 next_ipc_id_++,
79 type,
80 security_origin));
81 }
82
83 void MediaStreamDispatcher::OpenDevice(
84 int request_id,
85 MediaStreamDispatcherEventHandler* event_handler,
86 const std::string& device_id,
87 media_stream::MediaStreamType type,
88 const std::string& security_origin) {
89 DVLOG(1) << "MediaStreamDispatcher::OpenDevice(" << request_id << ")";
90
91 requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
92 Send(new MediaStreamHostMsg_OpenDevice(routing_id(),
93 next_ipc_id_++,
94 device_id,
95 type,
96 security_origin));
97 }
98
99 void MediaStreamDispatcher::CloseDevice(const std::string& label) {
100 DVLOG(1) << "MediaStreamDispatcher::CloseDevice"
101 << ", {label = " << label << "}";
mflodman_chromium_OOO 2011/12/02 18:44:02 nit: indentation.
wjia(left Chromium) 2012/01/24 00:59:46 Done.
102
103 StopStream(label);
104 }
105
68 bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) { 106 bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) {
69 bool handled = true; 107 bool handled = true;
70 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcher, message) 108 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcher, message)
71 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated, 109 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated,
72 OnStreamGenerated) 110 OnStreamGenerated)
73 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed, 111 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed,
74 OnStreamGenerationFailed) 112 OnStreamGenerationFailed)
75 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_VideoDeviceFailed, 113 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_VideoDeviceFailed,
76 OnVideoDeviceFailed) 114 OnVideoDeviceFailed)
77 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_AudioDeviceFailed, 115 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_AudioDeviceFailed,
78 OnAudioDeviceFailed) 116 OnAudioDeviceFailed)
117 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated,
118 OnDevicesEnumerated)
119 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerationFailed,
120 OnDevicesEnumerationFailed)
121 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened,
122 OnDeviceOpened)
123 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpenFailed,
124 OnDeviceOpenFailed)
79 IPC_MESSAGE_UNHANDLED(handled = false) 125 IPC_MESSAGE_UNHANDLED(handled = false)
80 IPC_END_MESSAGE_MAP() 126 IPC_END_MESSAGE_MAP()
81 return handled; 127 return handled;
82 } 128 }
83 129
84 void MediaStreamDispatcher::OnStreamGenerated( 130 void MediaStreamDispatcher::OnStreamGenerated(
85 int request_id, 131 int request_id,
86 const std::string& label, 132 const std::string& label,
87 const media_stream::StreamDeviceInfoArray& audio_array, 133 const media_stream::StreamDeviceInfoArray& audio_array,
88 const media_stream::StreamDeviceInfoArray& video_array) { 134 const media_stream::StreamDeviceInfoArray& video_array) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 return; 187 return;
142 188
143 // index is the index in the audio_array that has failed. 189 // index is the index in the audio_array that has failed.
144 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index)); 190 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index));
145 media_stream::StreamDeviceInfoArray::iterator device_it = 191 media_stream::StreamDeviceInfoArray::iterator device_it =
146 it->second.audio_array.begin(); 192 it->second.audio_array.begin();
147 it->second.audio_array.erase(device_it + index); 193 it->second.audio_array.erase(device_it + index);
148 it->second.handler->OnAudioDeviceFailed(label, index); 194 it->second.handler->OnAudioDeviceFailed(label, index);
149 } 195 }
150 196
197 void MediaStreamDispatcher::OnDevicesEnumerated(
198 int request_id,
199 const media_stream::StreamDeviceInfoArray& device_array) {
200
201 for (RequestList::iterator it = requests_.begin();
202 it != requests_.end(); ++it) {
203 Request& request = *it;
204 if (request.ipc_request == request_id) {
205 request.handler->OnDevicesEnumerated(request.request_id, device_array);
206 DVLOG(1) << "MediaStreamDispatcher::OnDevicesEnumerated("
207 << request.request_id << ")";
208 requests_.erase(it);
209 break;
210 }
211 }
212 }
213
214 void MediaStreamDispatcher::OnDevicesEnumerationFailed(int request_id) {
215 for (RequestList::iterator it = requests_.begin();
216 it != requests_.end(); ++it) {
217 Request& request = *it;
218 if (request.ipc_request == request_id) {
219 request.handler->OnStreamGenerationFailed(request.request_id);
220 DVLOG(1) << "MediaStreamDispatcher::OnDevicesEnumerationFailed("
221 << request.request_id << ")\n";
222 requests_.erase(it);
223 break;
224 }
225 }
226 }
227
228 void MediaStreamDispatcher::OnDeviceOpened(
229 int request_id,
230 const std::string& label,
231 const media_stream::StreamDeviceInfo& device_info) {
232 for (RequestList::iterator it = requests_.begin();
233 it != requests_.end(); ++it) {
234 Request& request = *it;
235 if (request.ipc_request == request_id) {
236 Stream new_stream;
237 new_stream.handler = request.handler;
238 new_stream.video_array.push_back(device_info);
239 label_stream_map_[label] = new_stream;
240 request.handler->OnDeviceOpened(request.request_id, label,
241 device_info);
242 DVLOG(1) << "MediaStreamDispatcher::OnDeviceOpened("
243 << request.request_id << ", " << label << ")";
244 requests_.erase(it);
245 break;
246 }
247 }
248 }
249
250 void MediaStreamDispatcher::OnDeviceOpenFailed(int request_id) {
251 for (RequestList::iterator it = requests_.begin();
252 it != requests_.end(); ++it) {
253 Request& request = *it;
254 if (request.ipc_request == request_id) {
255 request.handler->OnDeviceOpenFailed(request.request_id);
256 DVLOG(1) << "MediaStreamDispatcher::OnDeviceOpenFailed("
257 << request.request_id << ")\n";
258 requests_.erase(it);
259 break;
260 }
261 }
262 }
263
151 int MediaStreamDispatcher::audio_session_id(const std::string& label, 264 int MediaStreamDispatcher::audio_session_id(const std::string& label,
152 int index) { 265 int index) {
153 LabelStreamMap::iterator it = label_stream_map_.find(label); 266 LabelStreamMap::iterator it = label_stream_map_.find(label);
154 if (it == label_stream_map_.end()) 267 if (it == label_stream_map_.end())
155 return media_stream::StreamDeviceInfo::kNoId; 268 return media_stream::StreamDeviceInfo::kNoId;
156 269
157 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index)); 270 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index));
158 return it->second.audio_array[index].session_id; 271 return it->second.audio_array[index].session_id;
159 } 272 }
160 273
161 bool MediaStreamDispatcher::IsStream(const std::string& label) { 274 bool MediaStreamDispatcher::IsStream(const std::string& label) {
162 return label_stream_map_.find(label) != label_stream_map_.end(); 275 return label_stream_map_.find(label) != label_stream_map_.end();
163 } 276 }
164 277
165 int MediaStreamDispatcher::video_session_id(const std::string& label, 278 int MediaStreamDispatcher::video_session_id(const std::string& label,
166 int index) { 279 int index) {
167 LabelStreamMap::iterator it = label_stream_map_.find(label); 280 LabelStreamMap::iterator it = label_stream_map_.find(label);
168 if (it == label_stream_map_.end()) 281 if (it == label_stream_map_.end())
169 return media_stream::StreamDeviceInfo::kNoId; 282 return media_stream::StreamDeviceInfo::kNoId;
170 283
171 DCHECK_GT(it->second.video_array.size(), static_cast<size_t>(index)); 284 DCHECK_GT(it->second.video_array.size(), static_cast<size_t>(index));
172 return it->second.video_array[index].session_id; 285 return it->second.video_array[index].session_id;
173 } 286 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698