OLD | NEW |
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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 if (!iter->get()->ended()) | 166 if (!iter->get()->ended()) |
167 return false; | 167 return false; |
168 } | 168 } |
169 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) { | 169 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) { |
170 if (!iter->get()->ended()) | 170 if (!iter->get()->ended()) |
171 return false; | 171 return false; |
172 } | 172 } |
173 return true; | 173 return true; |
174 } | 174 } |
175 | 175 |
176 bool MediaStream::ended() const | |
177 { | |
178 return m_stopped || m_descriptor->ended(); | |
179 } | |
180 | |
181 MediaStreamTrackVector MediaStream::getTracks() | 176 MediaStreamTrackVector MediaStream::getTracks() |
182 { | 177 { |
183 MediaStreamTrackVector tracks; | 178 MediaStreamTrackVector tracks; |
184 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) | 179 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) |
185 tracks.append(iter->get()); | 180 tracks.append(iter->get()); |
186 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) | 181 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) |
187 tracks.append(iter->get()); | 182 tracks.append(iter->get()); |
188 return tracks; | 183 return tracks; |
189 } | 184 } |
190 | 185 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 MediaStream* MediaStream::clone(ExecutionContext* context) | 264 MediaStream* MediaStream::clone(ExecutionContext* context) |
270 { | 265 { |
271 MediaStreamTrackVector tracks; | 266 MediaStreamTrackVector tracks; |
272 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) | 267 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) |
273 tracks.append((*iter)->clone(context)); | 268 tracks.append((*iter)->clone(context)); |
274 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) | 269 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) |
275 tracks.append((*iter)->clone(context)); | 270 tracks.append((*iter)->clone(context)); |
276 return MediaStream::create(context, tracks); | 271 return MediaStream::create(context, tracks); |
277 } | 272 } |
278 | 273 |
279 void MediaStream::stop() | |
280 { | |
281 if (ended()) | |
282 return; | |
283 | |
284 streamEnded(); | |
285 | |
286 MediaStreamCenter::instance().didStopLocalMediaStream(descriptor()); | |
287 } | |
288 | |
289 void MediaStream::trackEnded() | 274 void MediaStream::trackEnded() |
290 { | 275 { |
291 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) { | 276 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) { |
292 if (!(*iter)->ended()) | 277 if (!(*iter)->ended()) |
293 return; | 278 return; |
294 } | 279 } |
295 | 280 |
296 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) { | 281 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) { |
297 if (!(*iter)->ended()) | 282 if (!(*iter)->ended()) |
298 return; | 283 return; |
299 } | 284 } |
300 | 285 |
301 streamEnded(); | 286 streamEnded(); |
302 } | 287 } |
303 | 288 |
304 void MediaStream::streamEnded() | 289 void MediaStream::streamEnded() |
305 { | 290 { |
306 if (ended()) | 291 if (m_stopped || m_descriptor->ended()) |
307 return; | 292 return; |
308 | 293 |
309 if (active()) { | 294 if (active()) { |
310 m_descriptor->setActive(false); | 295 m_descriptor->setActive(false); |
311 scheduleDispatchEvent(Event::create(EventTypeNames::inactive)); | 296 scheduleDispatchEvent(Event::create(EventTypeNames::inactive)); |
312 } | 297 } |
313 m_descriptor->setEnded(); | 298 m_descriptor->setEnded(); |
314 scheduleDispatchEvent(Event::create(EventTypeNames::ended)); | 299 scheduleDispatchEvent(Event::create(EventTypeNames::ended)); |
315 } | 300 } |
316 | 301 |
317 void MediaStream::contextDestroyed() | 302 void MediaStream::contextDestroyed() |
318 { | 303 { |
319 ContextLifecycleObserver::contextDestroyed(); | 304 ContextLifecycleObserver::contextDestroyed(); |
320 m_stopped = true; | 305 m_stopped = true; |
321 } | 306 } |
322 | 307 |
323 const AtomicString& MediaStream::interfaceName() const | 308 const AtomicString& MediaStream::interfaceName() const |
324 { | 309 { |
325 return EventTargetNames::MediaStream; | 310 return EventTargetNames::MediaStream; |
326 } | 311 } |
327 | 312 |
328 ExecutionContext* MediaStream::executionContext() const | 313 ExecutionContext* MediaStream::executionContext() const |
329 { | 314 { |
330 return ContextLifecycleObserver::executionContext(); | 315 return ContextLifecycleObserver::executionContext(); |
331 } | 316 } |
332 | 317 |
333 void MediaStream::addRemoteTrack(MediaStreamComponent* component) | 318 void MediaStream::addRemoteTrack(MediaStreamComponent* component) |
334 { | 319 { |
335 ASSERT(component); | 320 ASSERT(component); |
336 if (ended()) | 321 if (m_stopped || m_descriptor->ended()) |
337 return; | 322 return; |
338 | 323 |
339 MediaStreamTrack* track = MediaStreamTrack::create(executionContext(), compo
nent); | 324 MediaStreamTrack* track = MediaStreamTrack::create(executionContext(), compo
nent); |
340 switch (component->source()->type()) { | 325 switch (component->source()->type()) { |
341 case MediaStreamSource::TypeAudio: | 326 case MediaStreamSource::TypeAudio: |
342 m_audioTracks.append(track); | 327 m_audioTracks.append(track); |
343 break; | 328 break; |
344 case MediaStreamSource::TypeVideo: | 329 case MediaStreamSource::TypeVideo: |
345 m_videoTracks.append(track); | 330 m_videoTracks.append(track); |
346 break; | 331 break; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 DEFINE_TRACE(MediaStream) | 411 DEFINE_TRACE(MediaStream) |
427 { | 412 { |
428 visitor->trace(m_audioTracks); | 413 visitor->trace(m_audioTracks); |
429 visitor->trace(m_videoTracks); | 414 visitor->trace(m_videoTracks); |
430 visitor->trace(m_scheduledEvents); | 415 visitor->trace(m_scheduledEvents); |
431 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStream>::trace(visi
tor); | 416 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStream>::trace(visi
tor); |
432 ContextLifecycleObserver::trace(visitor); | 417 ContextLifecycleObserver::trace(visitor); |
433 } | 418 } |
434 | 419 |
435 } // namespace blink | 420 } // namespace blink |
OLD | NEW |