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

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

Issue 173363002: Move mediastream module to oilpan transition types (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 6 years, 7 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
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | Source/modules/mediastream/MediaStream.idl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackV ector) 48 static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackV ector)
49 { 49 {
50 if (track->ended()) 50 if (track->ended())
51 return; 51 return;
52 52
53 MediaStreamSource* source = track->component()->source(); 53 MediaStreamSource* source = track->component()->source();
54 if (!containsSource(trackVector, source)) 54 if (!containsSource(trackVector, source))
55 trackVector.append(track); 55 trackVector.append(track);
56 } 56 }
57 57
58 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context) 58 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t)
59 { 59 {
60 MediaStreamTrackVector audioTracks; 60 MediaStreamTrackVector audioTracks;
61 MediaStreamTrackVector videoTracks; 61 MediaStreamTrackVector videoTracks;
62 62
63 return adoptRef(new MediaStream(context, audioTracks, videoTracks)); 63 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, aud ioTracks, videoTracks));
64 } 64 }
65 65
66 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPt r<MediaStream> stream) 66 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t, PassRefPtrWillBeRawPtr<MediaStream> stream)
67 { 67 {
68 ASSERT(stream); 68 ASSERT(stream);
69 69
70 MediaStreamTrackVector audioTracks; 70 MediaStreamTrackVector audioTracks;
71 MediaStreamTrackVector videoTracks; 71 MediaStreamTrackVector videoTracks;
72 72
73 for (size_t i = 0; i < stream->m_audioTracks.size(); ++i) 73 for (size_t i = 0; i < stream->m_audioTracks.size(); ++i)
74 processTrack(stream->m_audioTracks[i].get(), audioTracks); 74 processTrack(stream->m_audioTracks[i].get(), audioTracks);
75 75
76 for (size_t i = 0; i < stream->m_videoTracks.size(); ++i) 76 for (size_t i = 0; i < stream->m_videoTracks.size(); ++i)
77 processTrack(stream->m_videoTracks[i].get(), videoTracks); 77 processTrack(stream->m_videoTracks[i].get(), videoTracks);
78 78
79 return adoptRef(new MediaStream(context, audioTracks, videoTracks)); 79 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, aud ioTracks, videoTracks));
80 } 80 }
81 81
82 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, const Med iaStreamTrackVector& tracks) 82 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t, const MediaStreamTrackVector& tracks)
83 { 83 {
84 MediaStreamTrackVector audioTracks; 84 MediaStreamTrackVector audioTracks;
85 MediaStreamTrackVector videoTracks; 85 MediaStreamTrackVector videoTracks;
86 86
87 for (size_t i = 0; i < tracks.size(); ++i) 87 for (size_t i = 0; i < tracks.size(); ++i)
88 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks : videoTracks); 88 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks : videoTracks);
89 89
90 return adoptRef(new MediaStream(context, audioTracks, videoTracks)); 90 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, aud ioTracks, videoTracks));
91 } 91 }
92 92
93 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPt r<MediaStreamDescriptor> streamDescriptor) 93 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t, PassRefPtr<MediaStreamDescriptor> streamDescriptor)
94 { 94 {
95 return adoptRef(new MediaStream(context, streamDescriptor)); 95 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, str eamDescriptor));
96 } 96 }
97 97
98 MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri ptor> streamDescriptor) 98 MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri ptor> streamDescriptor)
99 : ContextLifecycleObserver(context) 99 : ContextLifecycleObserver(context)
100 , m_stopped(false) 100 , m_stopped(false)
101 , m_descriptor(streamDescriptor) 101 , m_descriptor(streamDescriptor)
102 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) 102 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
103 { 103 {
104 ScriptWrappable::init(this); 104 ScriptWrappable::init(this);
105 m_descriptor->setClient(this); 105 m_descriptor->setClient(this);
106 106
107 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents(); 107 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
108 m_audioTracks.reserveCapacity(numberOfAudioTracks); 108 m_audioTracks.reserveCapacity(numberOfAudioTracks);
109 for (size_t i = 0; i < numberOfAudioTracks; i++) { 109 for (size_t i = 0; i < numberOfAudioTracks; i++) {
110 RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_ descriptor->audioComponent(i)); 110 RefPtrWillBeRawPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create (context, m_descriptor->audioComponent(i));
111 newTrack->addObserver(this); 111 newTrack->registerMediaStream(this);
112 m_audioTracks.append(newTrack.release()); 112 m_audioTracks.append(newTrack.release());
113 } 113 }
114 114
115 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents(); 115 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
116 m_videoTracks.reserveCapacity(numberOfVideoTracks); 116 m_videoTracks.reserveCapacity(numberOfVideoTracks);
117 for (size_t i = 0; i < numberOfVideoTracks; i++) { 117 for (size_t i = 0; i < numberOfVideoTracks; i++) {
118 RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_ descriptor->videoComponent(i)); 118 RefPtrWillBeRawPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create (context, m_descriptor->videoComponent(i));
119 newTrack->addObserver(this); 119 newTrack->registerMediaStream(this);
120 m_videoTracks.append(newTrack.release()); 120 m_videoTracks.append(newTrack.release());
121 } 121 }
122 } 122 }
123 123
124 MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector & audioTracks, const MediaStreamTrackVector& videoTracks) 124 MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector & audioTracks, const MediaStreamTrackVector& videoTracks)
125 : ContextLifecycleObserver(context) 125 : ContextLifecycleObserver(context)
126 , m_stopped(false) 126 , m_stopped(false)
127 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) 127 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
128 { 128 {
129 ScriptWrappable::init(this); 129 ScriptWrappable::init(this);
130 130
131 MediaStreamComponentVector audioComponents; 131 MediaStreamComponentVector audioComponents;
132 MediaStreamComponentVector videoComponents; 132 MediaStreamComponentVector videoComponents;
133 133
134 MediaStreamTrackVector::const_iterator iter; 134 MediaStreamTrackVector::const_iterator iter;
135 for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) { 135 for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) {
136 (*iter)->addObserver(this); 136 (*iter)->registerMediaStream(this);
137 audioComponents.append((*iter)->component()); 137 audioComponents.append((*iter)->component());
138 } 138 }
139 for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) { 139 for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) {
140 (*iter)->addObserver(this); 140 (*iter)->registerMediaStream(this);
141 videoComponents.append((*iter)->component()); 141 videoComponents.append((*iter)->component());
142 } 142 }
143 143
144 m_descriptor = MediaStreamDescriptor::create(audioComponents, videoComponent s); 144 m_descriptor = MediaStreamDescriptor::create(audioComponents, videoComponent s);
145 m_descriptor->setClient(this); 145 m_descriptor->setClient(this);
146 MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get()); 146 MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get());
147 147
148 m_audioTracks = audioTracks; 148 m_audioTracks = audioTracks;
149 m_videoTracks = videoTracks; 149 m_videoTracks = videoTracks;
150 } 150 }
151 151
152 MediaStream::~MediaStream() 152 MediaStream::~MediaStream()
153 { 153 {
154 #if !ENABLE(OILPAN)
154 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) 155 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter)
155 (*iter)->removeObserver(this); 156 (*iter)->unregisterMediaStream(this);
156 157
157 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) 158 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter)
158 (*iter)->removeObserver(this); 159 (*iter)->unregisterMediaStream(this);
160 #endif
159 161
160 m_descriptor->setClient(0); 162 m_descriptor->setClient(0);
161 } 163 }
162 164
163 bool MediaStream::ended() const 165 bool MediaStream::ended() const
164 { 166 {
165 return m_stopped || m_descriptor->ended(); 167 return m_stopped || m_descriptor->ended();
166 } 168 }
167 169
168 void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionState & exceptionState) 170 void MediaStream::addTrack(PassRefPtrWillBeRawPtr<MediaStreamTrack> prpTrack, Ex ceptionState& exceptionState)
169 { 171 {
170 if (ended()) { 172 if (ended()) {
171 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished."); 173 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
172 return; 174 return;
173 } 175 }
174 176
175 if (!prpTrack) { 177 if (!prpTrack) {
176 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid."); 178 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid.");
177 return; 179 return;
178 } 180 }
179 181
180 RefPtr<MediaStreamTrack> track = prpTrack; 182 RefPtrWillBeRawPtr<MediaStreamTrack> track = prpTrack;
181 183
182 if (getTrackById(track->id())) 184 if (getTrackById(track->id()))
183 return; 185 return;
184 186
185 switch (track->component()->source()->type()) { 187 switch (track->component()->source()->type()) {
186 case MediaStreamSource::TypeAudio: 188 case MediaStreamSource::TypeAudio:
187 m_audioTracks.append(track); 189 m_audioTracks.append(track);
188 break; 190 break;
189 case MediaStreamSource::TypeVideo: 191 case MediaStreamSource::TypeVideo:
190 m_videoTracks.append(track); 192 m_videoTracks.append(track);
191 break; 193 break;
192 } 194 }
193 track->addObserver(this); 195 track->registerMediaStream(this);
194 m_descriptor->addComponent(track->component()); 196 m_descriptor->addComponent(track->component());
195 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), tra ck->component()); 197 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), tra ck->component());
196 } 198 }
197 199
198 void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionSt ate& exceptionState) 200 void MediaStream::removeTrack(PassRefPtrWillBeRawPtr<MediaStreamTrack> prpTrack, ExceptionState& exceptionState)
199 { 201 {
200 if (ended()) { 202 if (ended()) {
201 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished."); 203 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
202 return; 204 return;
203 } 205 }
204 206
205 if (!prpTrack) { 207 if (!prpTrack) {
206 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid."); 208 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid.");
207 return; 209 return;
208 } 210 }
209 211
210 RefPtr<MediaStreamTrack> track = prpTrack; 212 RefPtrWillBeRawPtr<MediaStreamTrack> track = prpTrack;
211 213
212 size_t pos = kNotFound; 214 size_t pos = kNotFound;
213 switch (track->component()->source()->type()) { 215 switch (track->component()->source()->type()) {
214 case MediaStreamSource::TypeAudio: 216 case MediaStreamSource::TypeAudio:
215 pos = m_audioTracks.find(track); 217 pos = m_audioTracks.find(track);
216 if (pos != kNotFound) 218 if (pos != kNotFound)
217 m_audioTracks.remove(pos); 219 m_audioTracks.remove(pos);
218 break; 220 break;
219 case MediaStreamSource::TypeVideo: 221 case MediaStreamSource::TypeVideo:
220 pos = m_videoTracks.find(track); 222 pos = m_videoTracks.find(track);
221 if (pos != kNotFound) 223 if (pos != kNotFound)
222 m_videoTracks.remove(pos); 224 m_videoTracks.remove(pos);
223 break; 225 break;
224 } 226 }
225 227
226 if (pos == kNotFound) 228 if (pos == kNotFound)
227 return; 229 return;
228 230 track->unregisterMediaStream(this);
229 track->removeObserver(this);
230 m_descriptor->removeComponent(track->component()); 231 m_descriptor->removeComponent(track->component());
231 232
232 if (!m_audioTracks.size() && !m_videoTracks.size()) 233 if (!m_audioTracks.size() && !m_videoTracks.size())
233 m_descriptor->setEnded(); 234 m_descriptor->setEnded();
234 235
235 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component()); 236 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component());
236 } 237 }
237 238
238 MediaStreamTrack* MediaStream::getTrackById(String id) 239 MediaStreamTrack* MediaStream::getTrackById(String id)
239 { 240 {
240 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) { 241 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) {
241 if ((*iter)->id() == id) 242 if ((*iter)->id() == id)
242 return iter->get(); 243 return iter->get();
243 } 244 }
244 245
245 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) { 246 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) {
246 if ((*iter)->id() == id) 247 if ((*iter)->id() == id)
247 return iter->get(); 248 return iter->get();
248 } 249 }
249 250
250 return 0; 251 return 0;
251 } 252 }
252 253
253 PassRefPtr<MediaStream> MediaStream::clone(ExecutionContext* context) 254 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::clone(ExecutionContext* context )
254 { 255 {
255 MediaStreamTrackVector tracks; 256 MediaStreamTrackVector tracks;
256 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) 257 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter)
257 tracks.append((*iter)->clone(context)); 258 tracks.append((*iter)->clone(context));
258 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) 259 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter)
259 tracks.append((*iter)->clone(context)); 260 tracks.append((*iter)->clone(context));
260 RefPtr<MediaStream> clonedStream = MediaStream::create(context, tracks); 261 return MediaStream::create(context, tracks);
261 return clonedStream.release();
262 } 262 }
263 263
264 void MediaStream::stop() 264 void MediaStream::stop()
265 { 265 {
266 if (ended()) 266 if (ended())
267 return; 267 return;
268 268
269 MediaStreamCenter::instance().didStopLocalMediaStream(descriptor()); 269 MediaStreamCenter::instance().didStopLocalMediaStream(descriptor());
270 270
271 streamEnded(); 271 streamEnded();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 { 310 {
311 return ContextLifecycleObserver::executionContext(); 311 return ContextLifecycleObserver::executionContext();
312 } 312 }
313 313
314 void MediaStream::addRemoteTrack(MediaStreamComponent* component) 314 void MediaStream::addRemoteTrack(MediaStreamComponent* component)
315 { 315 {
316 ASSERT(component); 316 ASSERT(component);
317 if (ended()) 317 if (ended())
318 return; 318 return;
319 319
320 RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(executionContext() , component); 320 RefPtrWillBeRawPtr<MediaStreamTrack> track = MediaStreamTrack::create(execut ionContext(), component);
321 switch (component->source()->type()) { 321 switch (component->source()->type()) {
322 case MediaStreamSource::TypeAudio: 322 case MediaStreamSource::TypeAudio:
323 m_audioTracks.append(track); 323 m_audioTracks.append(track);
324 break; 324 break;
325 case MediaStreamSource::TypeVideo: 325 case MediaStreamSource::TypeVideo:
326 m_videoTracks.append(track); 326 m_videoTracks.append(track);
327 break; 327 break;
328 } 328 }
329 track->addObserver(this); 329 track->registerMediaStream(this);
330 m_descriptor->addComponent(component); 330 m_descriptor->addComponent(component);
331 331
332 scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::addtrack , false, false, track)); 332 scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::addtrack , false, false, track));
333 } 333 }
334 334
335 void MediaStream::removeRemoteTrack(MediaStreamComponent* component) 335 void MediaStream::removeRemoteTrack(MediaStreamComponent* component)
336 { 336 {
337 if (ended()) 337 if (ended())
338 return; 338 return;
339 339
(...skipping 12 matching lines...) Expand all
352 if ((*tracks)[i]->component() == component) { 352 if ((*tracks)[i]->component() == component) {
353 index = i; 353 index = i;
354 break; 354 break;
355 } 355 }
356 } 356 }
357 if (index == kNotFound) 357 if (index == kNotFound)
358 return; 358 return;
359 359
360 m_descriptor->removeComponent(component); 360 m_descriptor->removeComponent(component);
361 361
362 RefPtr<MediaStreamTrack> track = (*tracks)[index]; 362 RefPtrWillBeRawPtr<MediaStreamTrack> track = (*tracks)[index];
363 track->removeObserver(this); 363 track->unregisterMediaStream(this);
364 tracks->remove(index); 364 tracks->remove(index);
365 scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::removetr ack, false, false, track)); 365 scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::removetr ack, false, false, track));
366 } 366 }
367 367
368 void MediaStream::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event) 368 void MediaStream::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event)
369 { 369 {
370 m_scheduledEvents.append(event); 370 m_scheduledEvents.append(event);
371 371
372 if (!m_scheduledEventTimer.isActive()) 372 if (!m_scheduledEventTimer.isActive())
373 m_scheduledEventTimer.startOneShot(0, FROM_HERE); 373 m_scheduledEventTimer.startOneShot(0, FROM_HERE);
(...skipping 12 matching lines...) Expand all
386 dispatchEvent((*it).release()); 386 dispatchEvent((*it).release());
387 387
388 events.clear(); 388 events.clear();
389 } 389 }
390 390
391 URLRegistry& MediaStream::registry() const 391 URLRegistry& MediaStream::registry() const
392 { 392 {
393 return MediaStreamRegistry::registry(); 393 return MediaStreamRegistry::registry();
394 } 394 }
395 395
396 void MediaStream::trace(Visitor* visitor)
397 {
398 visitor->trace(m_audioTracks);
399 visitor->trace(m_videoTracks);
400 visitor->trace(m_scheduledEvents);
401 }
402
396 } // namespace WebCore 403 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | Source/modules/mediastream/MediaStream.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698