| 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 { | 82 { |
| 83 MediaStreamTrackVector audioTracks; | 83 MediaStreamTrackVector audioTracks; |
| 84 MediaStreamTrackVector videoTracks; | 84 MediaStreamTrackVector videoTracks; |
| 85 | 85 |
| 86 for (size_t i = 0; i < tracks.size(); ++i) | 86 for (size_t i = 0; i < tracks.size(); ++i) |
| 87 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks
: videoTracks); | 87 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks
: videoTracks); |
| 88 | 88 |
| 89 return new MediaStream(context, audioTracks, videoTracks); | 89 return new MediaStream(context, audioTracks, videoTracks); |
| 90 } | 90 } |
| 91 | 91 |
| 92 MediaStream* MediaStream::create(ExecutionContext* context, PassRefPtr<MediaStre
amDescriptor> streamDescriptor) | 92 MediaStream* MediaStream::create(ExecutionContext* context, MediaStreamDescripto
r* streamDescriptor) |
| 93 { | 93 { |
| 94 return new MediaStream(context, streamDescriptor); | 94 return new MediaStream(context, streamDescriptor); |
| 95 } | 95 } |
| 96 | 96 |
| 97 MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri
ptor> streamDescriptor) | 97 MediaStream::MediaStream(ExecutionContext* context, MediaStreamDescriptor* strea
mDescriptor) |
| 98 : ContextLifecycleObserver(context) | 98 : ContextLifecycleObserver(context) |
| 99 , m_stopped(false) | 99 , m_stopped(false) |
| 100 , m_descriptor(streamDescriptor) | 100 , m_descriptor(streamDescriptor) |
| 101 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) | 101 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) |
| 102 { | 102 { |
| 103 m_descriptor->setClient(this); | 103 m_descriptor->setClient(this); |
| 104 | 104 |
| 105 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents(); | 105 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents(); |
| 106 m_audioTracks.reserveCapacity(numberOfAudioTracks); | 106 m_audioTracks.reserveCapacity(numberOfAudioTracks); |
| 107 for (size_t i = 0; i < numberOfAudioTracks; i++) { | 107 for (size_t i = 0; i < numberOfAudioTracks; i++) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 136 (*iter)->registerMediaStream(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)->registerMediaStream(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); |
| 147 | 147 |
| 148 m_audioTracks = audioTracks; | 148 m_audioTracks = audioTracks; |
| 149 m_videoTracks = videoTracks; | 149 m_videoTracks = videoTracks; |
| 150 if (emptyOrOnlyEndedTracks()) { | 150 if (emptyOrOnlyEndedTracks()) { |
| 151 m_descriptor->setActive(false); | 151 m_descriptor->setActive(false); |
| 152 } | 152 } |
| 153 } | 153 } |
| 154 | 154 |
| 155 MediaStream::~MediaStream() | 155 MediaStream::~MediaStream() |
| 156 { | 156 { |
| 157 m_descriptor->setClient(0); | |
| 158 } | 157 } |
| 159 | 158 |
| 160 bool MediaStream::emptyOrOnlyEndedTracks() | 159 bool MediaStream::emptyOrOnlyEndedTracks() |
| 161 { | 160 { |
| 162 if (!m_audioTracks.size() && !m_videoTracks.size()) { | 161 if (!m_audioTracks.size() && !m_videoTracks.size()) { |
| 163 return true; | 162 return true; |
| 164 } | 163 } |
| 165 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) { | 164 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) { |
| 166 if (!iter->get()->ended()) | 165 if (!iter->get()->ended()) |
| 167 return false; | 166 return false; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 break; | 201 break; |
| 203 } | 202 } |
| 204 track->registerMediaStream(this); | 203 track->registerMediaStream(this); |
| 205 m_descriptor->addComponent(track->component()); | 204 m_descriptor->addComponent(track->component()); |
| 206 | 205 |
| 207 if (!active() && !track->ended()) { | 206 if (!active() && !track->ended()) { |
| 208 m_descriptor->setActive(true); | 207 m_descriptor->setActive(true); |
| 209 scheduleDispatchEvent(Event::create(EventTypeNames::active)); | 208 scheduleDispatchEvent(Event::create(EventTypeNames::active)); |
| 210 } | 209 } |
| 211 | 210 |
| 212 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), tra
ck->component()); | 211 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor, track->co
mponent()); |
| 213 } | 212 } |
| 214 | 213 |
| 215 void MediaStream::removeTrack(MediaStreamTrack* track, ExceptionState& exception
State) | 214 void MediaStream::removeTrack(MediaStreamTrack* track, ExceptionState& exception
State) |
| 216 { | 215 { |
| 217 if (!track) { | 216 if (!track) { |
| 218 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac
k provided is invalid."); | 217 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac
k provided is invalid."); |
| 219 return; | 218 return; |
| 220 } | 219 } |
| 221 | 220 |
| 222 size_t pos = kNotFound; | 221 size_t pos = kNotFound; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 236 if (pos == kNotFound) | 235 if (pos == kNotFound) |
| 237 return; | 236 return; |
| 238 track->unregisterMediaStream(this); | 237 track->unregisterMediaStream(this); |
| 239 m_descriptor->removeComponent(track->component()); | 238 m_descriptor->removeComponent(track->component()); |
| 240 | 239 |
| 241 if (active() && emptyOrOnlyEndedTracks()) { | 240 if (active() && emptyOrOnlyEndedTracks()) { |
| 242 m_descriptor->setActive(false); | 241 m_descriptor->setActive(false); |
| 243 scheduleDispatchEvent(Event::create(EventTypeNames::inactive)); | 242 scheduleDispatchEvent(Event::create(EventTypeNames::inactive)); |
| 244 } | 243 } |
| 245 | 244 |
| 246 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(),
track->component()); | 245 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor, track-
>component()); |
| 247 } | 246 } |
| 248 | 247 |
| 249 MediaStreamTrack* MediaStream::getTrackById(String id) | 248 MediaStreamTrack* MediaStream::getTrackById(String id) |
| 250 { | 249 { |
| 251 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) { | 250 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
m_audioTracks.end(); ++iter) { |
| 252 if ((*iter)->id() == id) | 251 if ((*iter)->id() == id) |
| 253 return iter->get(); | 252 return iter->get(); |
| 254 } | 253 } |
| 255 | 254 |
| 256 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) { | 255 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
m_videoTracks.end(); ++iter) { |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 | 404 |
| 406 URLRegistry& MediaStream::registry() const | 405 URLRegistry& MediaStream::registry() const |
| 407 { | 406 { |
| 408 return MediaStreamRegistry::registry(); | 407 return MediaStreamRegistry::registry(); |
| 409 } | 408 } |
| 410 | 409 |
| 411 DEFINE_TRACE(MediaStream) | 410 DEFINE_TRACE(MediaStream) |
| 412 { | 411 { |
| 413 visitor->trace(m_audioTracks); | 412 visitor->trace(m_audioTracks); |
| 414 visitor->trace(m_videoTracks); | 413 visitor->trace(m_videoTracks); |
| 414 visitor->trace(m_descriptor); |
| 415 visitor->trace(m_scheduledEvents); | 415 visitor->trace(m_scheduledEvents); |
| 416 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStream>::trace(visi
tor); | 416 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStream>::trace(visi
tor); |
| 417 ContextLifecycleObserver::trace(visitor); | 417 ContextLifecycleObserver::trace(visitor); |
| 418 MediaStreamDescriptorClient::trace(visitor); |
| 418 } | 419 } |
| 419 | 420 |
| 420 } // namespace blink | 421 } // namespace blink |
| OLD | NEW |