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

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, 5 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 MediaStreamDispatcherEventHandler::~MediaStreamDispatcherEventHandler() {}
12
13 MediaStreamDispatcher::MediaStreamDispatcher(RenderView* render_view)
14 : RenderViewObserver(render_view),
15 next_ipc_id_(0) {
16 }
17
18 MediaStreamDispatcher::~MediaStreamDispatcher() {}
19
20 void MediaStreamDispatcher::GenerateStream(
21 int request_id,
22 MediaStreamDispatcherEventHandler* event_handler,
23 media_stream::StreamOptions components,
24 const std::string& security_origin) {
25 VLOG(1) << "MediaStreamDispatcher::GenerateStream(" << request_id << ")";
26
27 requests_.push_back(Request(event_handler, request_id, next_ipc_id_));
28 Send(new MediaStreamHostMsg_GenerateStream(routing_id(),
29 next_ipc_id_++,
30 components,
31 security_origin));
32 }
33
34 void MediaStreamDispatcher::StopStream(const std::string& label) {
35 VLOG(1) << "MediaStreamDispatcher::StopStream"
36 << ", {label = " << label << "}";
37
38 LabelStreamMap::iterator it = label_stream_map_.find(label);
39 if (it == label_stream_map_.end())
40 return;
41
42 Send(new MediaStreamHostMsg_StopGeneratedStream(routing_id(), label));
43 label_stream_map_.erase(it);
44 }
45
46 bool MediaStreamDispatcher::OnMessageReceived(const IPC::Message& message) {
47 bool handled = true;
48 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcher, message)
49 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated,
50 OnStreamGenerated)
51 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed,
52 OnStreamGenerationFailed)
53 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_VideoDeviceFailed,
54 OnVideoDeviceFailed)
55 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_AudioDeviceFailed,
56 OnAudioDeviceFailed)
57 IPC_MESSAGE_UNHANDLED(handled = false)
58 IPC_END_MESSAGE_MAP()
59 return handled;
60 }
61
62 void MediaStreamDispatcher::OnStreamGenerated(
63 int request_id,
64 const std::string& label,
65 const media_stream::StreamDeviceInfoArray& audio_array,
66 const media_stream::StreamDeviceInfoArray& video_array) {
67
68 for (RequestList::iterator it = requests_.begin();
69 it != requests_.end(); ++it) {
70 Request& request = *it;
71 if (request.ipc_request == request_id) {
72 Stream new_stream;
73 new_stream.handler = request.handler;
74 new_stream.audio_array = audio_array;
75 new_stream.video_array = video_array;
76 label_stream_map_[label] = new_stream;
77 request.handler->OnStreamGenerated(request.request_id, label,
78 audio_array, video_array);
79 VLOG(1) << "MediaStreamDispatcher::OnStreamGenerated("
80 << request.request_id << ", " << label << ")";
81 requests_.erase(it);
82 break;
83 }
84 }
85 }
86
87 void MediaStreamDispatcher::OnStreamGenerationFailed(int request_id) {
88 for (RequestList::iterator it = requests_.begin();
89 it != requests_.end(); ++it) {
90 Request& request = *it;
91 if (request.ipc_request == request_id) {
92 request.handler->OnStreamGenerationFailed(request.request_id);
93 VLOG(1) << "MediaStreamDispatcher::OnStreamGenerationFailed("
94 << request.request_id << ")\n";
95 requests_.erase(it);
96 break;
97 }
98 }
99 }
100
101 void MediaStreamDispatcher::OnVideoDeviceFailed(const std::string& label,
102 int index) {
103 LabelStreamMap::iterator it = label_stream_map_.find(label);
104 if (it == label_stream_map_.end())
105 return;
106
107 // index is the index in the video_array that has failed.
108 DCHECK_GT(it->second.video_array.size(), static_cast<size_t>(index));
109 media_stream::StreamDeviceInfoArray::iterator device_it =
110 it->second.video_array.begin();
111 it->second.video_array.erase(device_it + index);
112 it->second.handler->OnVideoDeviceFailed(label, index);
113 }
114
115 void MediaStreamDispatcher::OnAudioDeviceFailed(const std::string& label,
116 int index) {
117 LabelStreamMap::iterator it = label_stream_map_.find(label);
118 if (it == label_stream_map_.end())
119 return;
120
121 // index is the index in the audio_array that has failed.
122 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index));
123 media_stream::StreamDeviceInfoArray::iterator device_it =
124 it->second.audio_array.begin();
125 it->second.audio_array.erase(device_it + index);
126 it->second.handler->OnAudioDeviceFailed(label, index);
127 }
128
129 int MediaStreamDispatcher::audio_session_id(const std::string& label,
130 int index) {
131 LabelStreamMap::iterator it = label_stream_map_.find(label);
132 if (it == label_stream_map_.end())
133 return media_stream::StreamDeviceInfo::kNoId;
134
135 DCHECK_GT(it->second.audio_array.size(), static_cast<size_t>(index));
136 return it->second.audio_array[index].session_id;
137 }
138
139 bool MediaStreamDispatcher::IsStream(const std::string& label) {
140 return label_stream_map_.find(label) != label_stream_map_.end();
141 }
142
143 int MediaStreamDispatcher::video_session_id(const std::string& label,
144 int index) {
145 LabelStreamMap::iterator it = label_stream_map_.find(label);
146 if (it == label_stream_map_.end())
147 return media_stream::StreamDeviceInfo::kNoId;
148
149 DCHECK_GT(it->second.video_array.size(), static_cast<size_t>(index));
150 return it->second.video_array[index].session_id;
151 }
152
153 MediaStreamDispatcher::Stream::Stream()
154 : handler(NULL) {}
155
156 MediaStreamDispatcher::Stream::~Stream() {}
157
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_dispatcher.h ('k') | content/renderer/media/media_stream_dispatcher_eventhandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698