OLD | NEW |
---|---|
(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 } | |
OLD | NEW |