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

Side by Side Diff: Source/modules/mediastream/MediaStream.cpp

Issue 16753003: Revert "Remove MediaStreamDescriptor and call/use WebMediaStream directly" (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 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
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2011, 2012 Ericsson AB. All rights reserved. 3 * Copyright (C) 2011, 2012 Ericsson AB. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 10 matching lines...) Expand all
21 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "config.h" 26 #include "config.h"
27 #include "modules/mediastream/MediaStream.h" 27 #include "modules/mediastream/MediaStream.h"
28 28
29 #include "core/dom/Event.h" 29 #include "core/dom/Event.h"
30 #include "core/dom/ExceptionCode.h" 30 #include "core/dom/ExceptionCode.h"
31 #include "core/platform/UUID.h"
32 #include "core/platform/mediastream/MediaStreamCenter.h" 31 #include "core/platform/mediastream/MediaStreamCenter.h"
33 #include "core/platform/mediastream/MediaStreamSource.h" 32 #include "core/platform/mediastream/MediaStreamSource.h"
34 #include "modules/mediastream/MediaStreamRegistry.h" 33 #include "modules/mediastream/MediaStreamRegistry.h"
35 #include "modules/mediastream/MediaStreamTrackEvent.h" 34 #include "modules/mediastream/MediaStreamTrackEvent.h"
36 #include "public/platform/WebMediaStream.h"
37 #include "public/platform/WebMediaStreamSource.h"
38 #include "public/platform/WebMediaStreamTrack.h"
39 35
40 namespace WebCore { 36 namespace WebCore {
41 37
42 static bool containsSource(MediaStreamSourceVector& sourceVector, MediaStreamSou rce* source) 38 static bool containsSource(MediaStreamSourceVector& sourceVector, MediaStreamSou rce* source)
43 { 39 {
44 for (size_t i = 0; i < sourceVector.size(); ++i) { 40 for (size_t i = 0; i < sourceVector.size(); ++i) {
45 if (source->id() == sourceVector[i]->id()) 41 if (source->id() == sourceVector[i]->id())
46 return true; 42 return true;
47 } 43 }
48 return false; 44 return false;
49 } 45 }
50 46
51 static void processTrack(MediaStreamTrack* track, MediaStreamSourceVector& sourc eVector) 47 static void processTrack(MediaStreamTrack* track, MediaStreamSourceVector& sourc eVector)
52 { 48 {
53 if (track->ended()) 49 if (track->ended())
54 return; 50 return;
55 51
56 MediaStreamSource* source = track->component()->source(); 52 MediaStreamSource* source = track->component()->source();
57 if (!containsSource(sourceVector, source)) 53 if (!containsSource(sourceVector, source))
58 sourceVector.append(source); 54 sourceVector.append(source);
59 } 55 }
60 56
61 static PassRefPtr<MediaStream> createFromSourceVectors(ScriptExecutionContext* c ontext, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVect or& videoSources) 57 static PassRefPtr<MediaStream> createFromSourceVectors(ScriptExecutionContext* c ontext, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVect or& videoSources)
62 { 58 {
63 WebKit::WebMediaStream webStream = WebKit::WebMediaStream(createCanonicalUUI DString(), audioSources, videoSources); 59 RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(aud ioSources, videoSources);
64 MediaStreamCenter::instance().didCreateMediaStream(webStream); 60 MediaStreamCenter::instance().didCreateMediaStream(descriptor.get());
65 61
66 return MediaStream::create(context, webStream); 62 return MediaStream::create(context, descriptor.release());
67 } 63 }
68 64
69 PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context) 65 PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context)
70 { 66 {
71 MediaStreamSourceVector audioSources; 67 MediaStreamSourceVector audioSources;
72 MediaStreamSourceVector videoSources; 68 MediaStreamSourceVector videoSources;
73 69
74 return createFromSourceVectors(context, audioSources, videoSources); 70 return createFromSourceVectors(context, audioSources, videoSources);
75 } 71 }
76 72
(...skipping 17 matching lines...) Expand all
94 { 90 {
95 MediaStreamSourceVector audioSources; 91 MediaStreamSourceVector audioSources;
96 MediaStreamSourceVector videoSources; 92 MediaStreamSourceVector videoSources;
97 93
98 for (size_t i = 0; i < tracks.size(); ++i) 94 for (size_t i = 0; i < tracks.size(); ++i)
99 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioSource s : videoSources); 95 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioSource s : videoSources);
100 96
101 return createFromSourceVectors(context, audioSources, videoSources); 97 return createFromSourceVectors(context, audioSources, videoSources);
102 } 98 }
103 99
104 PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context, Web Kit::WebMediaStream webStream) 100 PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context, Pas sRefPtr<MediaStreamDescriptor> streamDescriptor)
105 { 101 {
106 return adoptRef(new MediaStream(context, webStream)); 102 return adoptRef(new MediaStream(context, streamDescriptor));
107 } 103 }
108 104
109 MediaStream::MediaStream(ScriptExecutionContext* context, WebKit::WebMediaStream webStream) 105 MediaStream::MediaStream(ScriptExecutionContext* context, PassRefPtr<MediaStream Descriptor> streamDescriptor)
110 : ContextDestructionObserver(context) 106 : ContextDestructionObserver(context)
111 , m_stopped(false) 107 , m_stopped(false)
112 , m_webStream(webStream) 108 , m_descriptor(streamDescriptor)
113 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) 109 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
114 { 110 {
115 ScriptWrappable::init(this); 111 ScriptWrappable::init(this);
116 m_webStream.setClient(this); 112 m_descriptor->setClient(this);
117 113
118 size_t numberOfAudioTracks = m_webStream.numberOfAudioComponents(); 114 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
119 m_audioTracks.reserveCapacity(numberOfAudioTracks); 115 m_audioTracks.reserveCapacity(numberOfAudioTracks);
120 for (size_t i = 0; i < numberOfAudioTracks; i++) 116 for (size_t i = 0; i < numberOfAudioTracks; i++)
121 m_audioTracks.append(MediaStreamTrack::create(context, m_webStream.audio Component(i))); 117 m_audioTracks.append(MediaStreamTrack::create(context, m_descriptor->aud ioComponent(i)));
122 118
123 size_t numberOfVideoTracks = m_webStream.numberOfVideoComponents(); 119 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
124 m_videoTracks.reserveCapacity(numberOfVideoTracks); 120 m_videoTracks.reserveCapacity(numberOfVideoTracks);
125 for (size_t i = 0; i < numberOfVideoTracks; i++) 121 for (size_t i = 0; i < numberOfVideoTracks; i++)
126 m_videoTracks.append(MediaStreamTrack::create(context, m_webStream.video Component(i))); 122 m_videoTracks.append(MediaStreamTrack::create(context, m_descriptor->vid eoComponent(i)));
127 } 123 }
128 124
129 MediaStream::~MediaStream() 125 MediaStream::~MediaStream()
130 { 126 {
131 m_webStream.setClient(0); 127 m_descriptor->setClient(0);
132 } 128 }
133 129
134 bool MediaStream::ended() const 130 bool MediaStream::ended() const
135 { 131 {
136 return m_stopped || m_webStream.ended(); 132 return m_stopped || m_descriptor->ended();
137 } 133 }
138 134
139 void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionCode& ec) 135 void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionCode& ec)
140 { 136 {
141 if (ended()) { 137 if (ended()) {
142 ec = INVALID_STATE_ERR; 138 ec = INVALID_STATE_ERR;
143 return; 139 return;
144 } 140 }
145 141
146 if (!prpTrack) { 142 if (!prpTrack) {
147 ec = TYPE_MISMATCH_ERR; 143 ec = TYPE_MISMATCH_ERR;
148 return; 144 return;
149 } 145 }
150 146
151 RefPtr<MediaStreamTrack> track = prpTrack; 147 RefPtr<MediaStreamTrack> track = prpTrack;
152 148
153 if (getTrackById(track->id())) 149 if (getTrackById(track->id()))
154 return; 150 return;
155 151
156 RefPtr<MediaStreamComponent> component = MediaStreamComponent::create(m_webS tream, track->component()->source()); 152 RefPtr<MediaStreamComponent> component = MediaStreamComponent::create(m_desc riptor.get(), track->component()->source());
157 RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(scriptExecution Context(), component.get()); 153 RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(scriptExecution Context(), component.get());
158 154
159 switch (component->source()->type()) { 155 switch (component->source()->type()) {
160 case MediaStreamSource::TypeAudio: 156 case MediaStreamSource::TypeAudio:
161 m_audioTracks.append(newTrack); 157 m_audioTracks.append(newTrack);
162 break; 158 break;
163 case MediaStreamSource::TypeVideo: 159 case MediaStreamSource::TypeVideo:
164 m_videoTracks.append(newTrack); 160 m_videoTracks.append(newTrack);
165 break; 161 break;
166 } 162 }
167 163
168 m_webStream.addComponent(component.get()); 164 m_descriptor->addComponent(component.release());
169 165
170 MediaStreamCenter::instance().didAddMediaStreamTrack(m_webStream, newTrack-> component()); 166 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), new Track->component());
171 } 167 }
172 168
173 void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionCo de& ec) 169 void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionCo de& ec)
174 { 170 {
175 if (ended()) { 171 if (ended()) {
176 ec = INVALID_STATE_ERR; 172 ec = INVALID_STATE_ERR;
177 return; 173 return;
178 } 174 }
179 175
180 if (!prpTrack) { 176 if (!prpTrack) {
(...skipping 13 matching lines...) Expand all
194 case MediaStreamSource::TypeVideo: 190 case MediaStreamSource::TypeVideo:
195 pos = m_videoTracks.find(track); 191 pos = m_videoTracks.find(track);
196 if (pos != notFound) 192 if (pos != notFound)
197 m_videoTracks.remove(pos); 193 m_videoTracks.remove(pos);
198 break; 194 break;
199 } 195 }
200 196
201 if (pos == notFound) 197 if (pos == notFound)
202 return; 198 return;
203 199
204 m_webStream.removeComponent(track->component()); 200 m_descriptor->removeComponent(track->component());
205 201
206 if (!m_audioTracks.size() && !m_videoTracks.size()) 202 if (!m_audioTracks.size() && !m_videoTracks.size())
207 m_webStream.setEnded(); 203 m_descriptor->setEnded();
208 204
209 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_webStream, track-> component()); 205 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component());
210 } 206 }
211 207
212 MediaStreamTrack* MediaStream::getTrackById(String id) 208 MediaStreamTrack* MediaStream::getTrackById(String id)
213 { 209 {
214 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) { 210 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) {
215 if ((*iter)->id() == id) 211 if ((*iter)->id() == id)
216 return (*iter).get(); 212 return (*iter).get();
217 } 213 }
218 214
219 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) { 215 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) {
220 if ((*iter)->id() == id) 216 if ((*iter)->id() == id)
221 return (*iter).get(); 217 return (*iter).get();
222 } 218 }
223 219
224 return 0; 220 return 0;
225 } 221 }
226 222
227 void MediaStream::stop() 223 void MediaStream::stop()
228 { 224 {
229 if (ended()) 225 if (ended())
230 return; 226 return;
231 227
232 MediaStreamCenter::instance().didStopLocalMediaStream(webStream()); 228 MediaStreamCenter::instance().didStopLocalMediaStream(descriptor());
233 229
234 streamEnded(); 230 streamEnded();
235 } 231 }
236 232
237 void MediaStream::trackEnded() 233 void MediaStream::trackEnded()
238 { 234 {
239 for (size_t i = 0; i < m_audioTracks.size(); ++i) 235 for (size_t i = 0; i < m_audioTracks.size(); ++i)
240 if (!m_audioTracks[i]->ended()) 236 if (!m_audioTracks[i]->ended())
241 return; 237 return;
242 238
243 for (size_t i = 0; i < m_videoTracks.size(); ++i) 239 for (size_t i = 0; i < m_videoTracks.size(); ++i)
244 if (!m_videoTracks[i]->ended()) 240 if (!m_videoTracks[i]->ended())
245 return; 241 return;
246 242
247 streamEnded(); 243 streamEnded();
248 } 244 }
249 245
250 void MediaStream::streamEnded() 246 void MediaStream::streamEnded()
251 { 247 {
252 if (ended()) 248 if (ended())
253 return; 249 return;
254 250
255 m_webStream.setEnded(); 251 m_descriptor->setEnded();
256 scheduleDispatchEvent(Event::create(eventNames().endedEvent, false, false)); 252 scheduleDispatchEvent(Event::create(eventNames().endedEvent, false, false));
257 } 253 }
258 254
259 void MediaStream::contextDestroyed() 255 void MediaStream::contextDestroyed()
260 { 256 {
261 ContextDestructionObserver::contextDestroyed(); 257 ContextDestructionObserver::contextDestroyed();
262 m_stopped = true; 258 m_stopped = true;
263 } 259 }
264 260
265 const AtomicString& MediaStream::interfaceName() const 261 const AtomicString& MediaStream::interfaceName() const
(...skipping 11 matching lines...) Expand all
277 return &m_eventTargetData; 273 return &m_eventTargetData;
278 } 274 }
279 275
280 EventTargetData* MediaStream::ensureEventTargetData() 276 EventTargetData* MediaStream::ensureEventTargetData()
281 { 277 {
282 return &m_eventTargetData; 278 return &m_eventTargetData;
283 } 279 }
284 280
285 void MediaStream::addRemoteTrack(MediaStreamComponent* component) 281 void MediaStream::addRemoteTrack(MediaStreamComponent* component)
286 { 282 {
287 ASSERT(component && !(component->stream().isNull())); 283 ASSERT(component && !component->stream());
288 if (ended()) 284 if (ended())
289 return; 285 return;
290 286
291 component->setStream(webStream()); 287 component->setStream(descriptor());
292 288
293 RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionCon text(), component); 289 RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionCon text(), component);
294 switch (component->source()->type()) { 290 switch (component->source()->type()) {
295 case MediaStreamSource::TypeAudio: 291 case MediaStreamSource::TypeAudio:
296 m_audioTracks.append(track); 292 m_audioTracks.append(track);
297 break; 293 break;
298 case MediaStreamSource::TypeVideo: 294 case MediaStreamSource::TypeVideo:
299 m_videoTracks.append(track); 295 m_videoTracks.append(track);
300 break; 296 break;
301 } 297 }
302 m_webStream.addComponent(component); 298 m_descriptor->addComponent(component);
303 299
304 scheduleDispatchEvent(MediaStreamTrackEvent::create(eventNames().addtrackEve nt, false, false, track)); 300 scheduleDispatchEvent(MediaStreamTrackEvent::create(eventNames().addtrackEve nt, false, false, track));
305 } 301 }
306 302
307 void MediaStream::removeRemoteTrack(MediaStreamComponent* component) 303 void MediaStream::removeRemoteTrack(MediaStreamComponent* component)
308 { 304 {
309 if (ended()) 305 if (ended())
310 return; 306 return;
311 307
312 MediaStreamTrackVector* tracks = 0; 308 MediaStreamTrackVector* tracks = 0;
313 switch (component->source()->type()) { 309 switch (component->source()->type()) {
314 case MediaStreamSource::TypeAudio: 310 case MediaStreamSource::TypeAudio:
315 tracks = &m_audioTracks; 311 tracks = &m_audioTracks;
316 break; 312 break;
317 case MediaStreamSource::TypeVideo: 313 case MediaStreamSource::TypeVideo:
318 tracks = &m_videoTracks; 314 tracks = &m_videoTracks;
319 break; 315 break;
320 } 316 }
321 317
322 size_t index = notFound; 318 size_t index = notFound;
323 for (size_t i = 0; i < tracks->size(); ++i) { 319 for (size_t i = 0; i < tracks->size(); ++i) {
324 if ((*tracks)[i]->component() == component) { 320 if ((*tracks)[i]->component() == component) {
325 index = i; 321 index = i;
326 break; 322 break;
327 } 323 }
328 } 324 }
329 if (index == notFound) 325 if (index == notFound)
330 return; 326 return;
331 327
332 m_webStream.removeComponent(component); 328 m_descriptor->removeComponent(component);
333 329
334 RefPtr<MediaStreamTrack> track = (*tracks)[index]; 330 RefPtr<MediaStreamTrack> track = (*tracks)[index];
335 tracks->remove(index); 331 tracks->remove(index);
336 scheduleDispatchEvent(MediaStreamTrackEvent::create(eventNames().removetrack Event, false, false, track)); 332 scheduleDispatchEvent(MediaStreamTrackEvent::create(eventNames().removetrack Event, false, false, track));
337 } 333 }
338 334
339 void MediaStream::scheduleDispatchEvent(PassRefPtr<Event> event) 335 void MediaStream::scheduleDispatchEvent(PassRefPtr<Event> event)
340 { 336 {
341 m_scheduledEvents.append(event); 337 m_scheduledEvents.append(event);
342 338
(...skipping 15 matching lines...) Expand all
358 354
359 events.clear(); 355 events.clear();
360 } 356 }
361 357
362 URLRegistry& MediaStream::registry() const 358 URLRegistry& MediaStream::registry() const
363 { 359 {
364 return MediaStreamRegistry::registry(); 360 return MediaStreamRegistry::registry();
365 } 361 }
366 362
367 } // namespace WebCore 363 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | Source/modules/mediastream/MediaStreamRegistry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698