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

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