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

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

Issue 827673002: Add MediaStream.active attribute (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 12 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
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | no next file » | 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698