Chromium Code Reviews| 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 110 m_audioTracks.append(newTrack); | 110 m_audioTracks.append(newTrack); |
| 111 } | 111 } |
| 112 | 112 |
| 113 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents(); | 113 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents(); |
| 114 m_videoTracks.reserveCapacity(numberOfVideoTracks); | 114 m_videoTracks.reserveCapacity(numberOfVideoTracks); |
| 115 for (size_t i = 0; i < numberOfVideoTracks; i++) { | 115 for (size_t i = 0; i < numberOfVideoTracks; i++) { |
| 116 MediaStreamTrack* newTrack = MediaStreamTrack::create(context, m_descrip tor->videoComponent(i)); | 116 MediaStreamTrack* newTrack = MediaStreamTrack::create(context, m_descrip tor->videoComponent(i)); |
| 117 newTrack->registerMediaStream(this); | 117 newTrack->registerMediaStream(this); |
| 118 m_videoTracks.append(newTrack); | 118 m_videoTracks.append(newTrack); |
| 119 } | 119 } |
| 120 | |
| 121 if (emptyOrOnlyEndedTracks()) | |
| 122 m_descriptor->setEnded(); | |
| 120 } | 123 } |
| 121 | 124 |
| 122 MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector & audioTracks, const MediaStreamTrackVector& videoTracks) | 125 MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector & audioTracks, const MediaStreamTrackVector& videoTracks) |
| 123 : ContextLifecycleObserver(context) | 126 : ContextLifecycleObserver(context) |
| 124 , m_stopped(false) | 127 , m_stopped(false) |
| 125 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) | 128 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) |
| 126 { | 129 { |
| 127 MediaStreamComponentVector audioComponents; | 130 MediaStreamComponentVector audioComponents; |
| 128 MediaStreamComponentVector videoComponents; | 131 MediaStreamComponentVector videoComponents; |
| 129 | 132 |
| 130 MediaStreamTrackVector::const_iterator iter; | 133 MediaStreamTrackVector::const_iterator iter; |
| 131 for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) { | 134 for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) { |
| 132 (*iter)->registerMediaStream(this); | 135 (*iter)->registerMediaStream(this); |
| 133 audioComponents.append((*iter)->component()); | 136 audioComponents.append((*iter)->component()); |
| 134 } | 137 } |
| 135 for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) { | 138 for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) { |
| 136 (*iter)->registerMediaStream(this); | 139 (*iter)->registerMediaStream(this); |
| 137 videoComponents.append((*iter)->component()); | 140 videoComponents.append((*iter)->component()); |
| 138 } | 141 } |
| 139 | 142 |
| 140 m_descriptor = MediaStreamDescriptor::create(audioComponents, videoComponent s); | 143 m_descriptor = MediaStreamDescriptor::create(audioComponents, videoComponent s); |
| 141 m_descriptor->setClient(this); | 144 m_descriptor->setClient(this); |
| 142 MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get()); | 145 MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get()); |
| 143 | 146 |
| 144 m_audioTracks = audioTracks; | 147 m_audioTracks = audioTracks; |
| 145 m_videoTracks = videoTracks; | 148 m_videoTracks = videoTracks; |
| 149 if (emptyOrOnlyEndedTracks()) | |
| 150 m_descriptor->setEnded(); | |
| 146 } | 151 } |
| 147 | 152 |
| 148 MediaStream::~MediaStream() | 153 MediaStream::~MediaStream() |
| 149 { | 154 { |
| 150 m_descriptor->setClient(0); | 155 m_descriptor->setClient(0); |
| 151 } | 156 } |
| 152 | 157 |
| 158 bool MediaStream::emptyOrOnlyEndedTracks() | |
| 159 { | |
| 160 if (!m_audioTracks.size() && !m_videoTracks.size()) { | |
| 161 return true; | |
| 162 } | |
| 163 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != | |
|
perkj_chrome
2015/01/07 14:12:17
?
| |
| 164 if (!iter->get()->ended()) | |
| 165 return false; | |
| 166 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != | |
| 167 if (!iter->get()->ended()) | |
| 168 return false; | |
| 169 return true; | |
| 170 } | |
| 171 | |
| 153 bool MediaStream::ended() const | 172 bool MediaStream::ended() const |
| 154 { | 173 { |
| 155 return m_stopped || m_descriptor->ended(); | 174 return m_stopped || m_descriptor->ended(); |
| 156 } | 175 } |
| 157 | 176 |
| 158 MediaStreamTrackVector MediaStream::getTracks() | 177 MediaStreamTrackVector MediaStream::getTracks() |
| 159 { | 178 { |
| 160 MediaStreamTrackVector tracks; | 179 MediaStreamTrackVector tracks; |
| 161 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) | 180 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) |
| 162 tracks.append(iter->get()); | 181 tracks.append(iter->get()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 217 if (pos != kNotFound) | 236 if (pos != kNotFound) |
| 218 m_videoTracks.remove(pos); | 237 m_videoTracks.remove(pos); |
| 219 break; | 238 break; |
| 220 } | 239 } |
| 221 | 240 |
| 222 if (pos == kNotFound) | 241 if (pos == kNotFound) |
| 223 return; | 242 return; |
| 224 track->unregisterMediaStream(this); | 243 track->unregisterMediaStream(this); |
| 225 m_descriptor->removeComponent(track->component()); | 244 m_descriptor->removeComponent(track->component()); |
| 226 | 245 |
| 227 if (!m_audioTracks.size() && !m_videoTracks.size()) | 246 if (emptyOrOnlyEndedTracks()) |
| 228 m_descriptor->setEnded(); | 247 m_descriptor->setEnded(); |
| 229 | 248 |
| 230 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component()); | 249 MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component()); |
| 231 } | 250 } |
| 232 | 251 |
| 233 MediaStreamTrack* MediaStream::getTrackById(String id) | 252 MediaStreamTrack* MediaStream::getTrackById(String id) |
| 234 { | 253 { |
| 235 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) { | 254 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) { |
| 236 if ((*iter)->id() == id) | 255 if ((*iter)->id() == id) |
| 237 return iter->get(); | 256 return iter->get(); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 389 | 408 |
| 390 void MediaStream::trace(Visitor* visitor) | 409 void MediaStream::trace(Visitor* visitor) |
| 391 { | 410 { |
| 392 visitor->trace(m_audioTracks); | 411 visitor->trace(m_audioTracks); |
| 393 visitor->trace(m_videoTracks); | 412 visitor->trace(m_videoTracks); |
| 394 visitor->trace(m_scheduledEvents); | 413 visitor->trace(m_scheduledEvents); |
| 395 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStream>::trace(visi tor); | 414 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStream>::trace(visi tor); |
| 396 } | 415 } |
| 397 | 416 |
| 398 } // namespace blink | 417 } // namespace blink |
| OLD | NEW |