Changeset 158018 in webkit
- Timestamp:
- Oct 25, 2013 10:35:20 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r157950 r158018 1989 1989 platform/mediastream/MediaStreamCenter.cpp 1990 1990 platform/mediastream/MediaStreamDescriptor.cpp 1991 platform/mediastream/MediaStreamTrackPrivate.cpp 1991 1992 platform/mediastream/MediaStreamSource.cpp 1992 1993 platform/mediastream/RTCIceCandidateDescriptor.cpp -
trunk/Source/WebCore/ChangeLog
r158016 r158018 1 2013-10-25 Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> 2 3 Adding platform implementation of MediaStreamTrack 4 https://bugs.webkit.org/show_bug.cgi?id=123301 5 6 Reviewed by Eric Carlson. 7 8 No new tests needed. 9 10 * CMakeLists.txt: 11 * Modules/mediastream/AudioStreamTrack.cpp: 12 (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter. 13 14 (WebCore::AudioStreamTrack::AudioStreamTrack): 15 * Modules/mediastream/AudioStreamTrack.h: 16 * Modules/mediastream/MediaStream.cpp: 17 (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate 18 instances to create each MediaStreamTrack of MediaStream. 19 20 (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with 21 MediaStreamTrackPrivate as parameter. 22 23 * Modules/mediastream/MediaStreamTrack.cpp: 24 (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a 25 MediaStreamSource. 26 27 (WebCore::MediaStreamTrack::~MediaStreamTrack): 28 (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate. 29 30 (WebCore::MediaStreamTrack::setSource): Ditto. 31 32 (WebCore::MediaStreamTrack::id): Ditto. 33 34 (WebCore::MediaStreamTrack::label): Ditto. 35 36 (WebCore::MediaStreamTrack::enabled): Ditto. 37 38 (WebCore::MediaStreamTrack::setEnabled): Ditto. 39 40 (WebCore::MediaStreamTrack::muted): Ditto. 41 42 (WebCore::MediaStreamTrack::readonly): Ditto. 43 44 (WebCore::MediaStreamTrack::remote): Ditto. 45 46 (WebCore::MediaStreamTrack::readyState): Ditto. 47 48 (WebCore::MediaStreamTrack::states): 49 (WebCore::MediaStreamTrack::capabilities): 50 (WebCore::MediaStreamTrack::clone): 51 (WebCore::MediaStreamTrack::stopProducingData): 52 (WebCore::MediaStreamTrack::ended): Ditto. 53 54 (WebCore::MediaStreamTrack::sourceStateChanged): Ditto. 55 56 (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto. 57 58 (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto. 59 (WebCore::MediaStreamTrack::configureTrackRendering): 60 (WebCore::MediaStreamTrack::stopped): Ditto. 61 62 (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate. 63 64 (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event. 65 66 (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event. 67 68 * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient. 69 70 (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate. 71 (WebCore::MediaStreamTrack::privateTrack): 72 * Modules/mediastream/VideoStreamTrack.cpp: 73 (WebCore::VideoStreamTrack::create): 74 (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter. 75 * Modules/mediastream/VideoStreamTrack.h: 76 * platform/mediastream/MediaStreamDescriptor.cpp: 77 (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of 78 MediaStreamDescriptor class). 79 80 (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector 81 82 (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector 83 84 * platform/mediastream/MediaStreamDescriptor.h: 85 (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams. 86 87 (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams. 88 89 (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams. 90 91 (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams. 92 93 (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor 94 has. 95 96 (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index 97 98 (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor 99 has. 100 (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index 101 * platform/mediastream/MediaStreamTrackPrivate.cpp: Added. 102 * platform/mediastream/MediaStreamTrackPrivate.h: Added. 103 1 104 2013-10-25 Zoltan Horvath <zoltan@webkit.org> 2 105 -
trunk/Source/WebCore/Modules/mediastream/AudioStreamTrack.cpp
r157068 r158018 38 38 RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, const Dictionary& audioConstraints) 39 39 { 40 return adoptRef(new AudioStreamTrack(context, 0, &audioConstraints));40 return adoptRef(new AudioStreamTrack(context, MediaStreamTrackPrivate::create(0), &audioConstraints)); 41 41 } 42 42 43 RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)43 RefPtr<AudioStreamTrack> AudioStreamTrack::create(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackPrivate> privateTrack) 44 44 { 45 return adoptRef(new AudioStreamTrack(context, source, 0));45 return adoptRef(new AudioStreamTrack(context, privateTrack, 0)); 46 46 } 47 47 … … 51 51 } 52 52 53 AudioStreamTrack::AudioStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary* audioConstraints)54 : MediaStreamTrack(context, source, audioConstraints)53 AudioStreamTrack::AudioStreamTrack(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackPrivate> privateTrack, const Dictionary* audioConstraints) 54 : MediaStreamTrack(context, privateTrack, audioConstraints) 55 55 { 56 56 } -
trunk/Source/WebCore/Modules/mediastream/AudioStreamTrack.h
r157068 r158018 41 41 public: 42 42 static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, const Dictionary&); 43 static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);43 static RefPtr<AudioStreamTrack> create(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackPrivate>); 44 44 static RefPtr<AudioStreamTrack> create(MediaStreamTrack*); 45 45 … … 49 49 50 50 private: 51 AudioStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);51 AudioStreamTrack(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackPrivate>, const Dictionary*); 52 52 explicit AudioStreamTrack(MediaStreamTrack*); 53 53 }; -
trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp
r157958 r158018 120 120 121 121 RefPtr<MediaStreamTrack> track; 122 size_t numberOfAudioTracks = m_descriptor->numberOfAudio Streams();122 size_t numberOfAudioTracks = m_descriptor->numberOfAudioTracks(); 123 123 m_audioTracks.reserveCapacity(numberOfAudioTracks); 124 124 for (size_t i = 0; i < numberOfAudioTracks; i++) { 125 track = AudioStreamTrack::create(context, m_descriptor->audio Streams(i));125 track = AudioStreamTrack::create(context, m_descriptor->audioTracks(i)); 126 126 track->addObserver(this); 127 127 m_audioTracks.append(track.release()); 128 128 } 129 129 130 size_t numberOfVideoTracks = m_descriptor->numberOfVideo Streams();130 size_t numberOfVideoTracks = m_descriptor->numberOfVideoTracks(); 131 131 m_videoTracks.reserveCapacity(numberOfVideoTracks); 132 132 for (size_t i = 0; i < numberOfVideoTracks; i++) { 133 track = VideoStreamTrack::create(context, m_descriptor->video Streams(i));133 track = VideoStreamTrack::create(context, m_descriptor->videoTracks(i)); 134 134 track->addObserver(this); 135 135 m_videoTracks.append(track.release()); … … 309 309 switch (source->type()) { 310 310 case MediaStreamSource::Audio: 311 track = AudioStreamTrack::create(scriptExecutionContext(), source);311 track = AudioStreamTrack::create(scriptExecutionContext(), MediaStreamTrackPrivate::create(source)); 312 312 m_audioTracks.append(track); 313 313 break; 314 314 case MediaStreamSource::Video: 315 track = VideoStreamTrack::create(scriptExecutionContext(), source);315 track = VideoStreamTrack::create(scriptExecutionContext(), MediaStreamTrackPrivate::create(source)); 316 316 m_videoTracks.append(track); 317 317 break; -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp
r157958 r158018 52 52 namespace WebCore { 53 53 54 MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary*)54 MediaStreamTrack::MediaStreamTrack(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackPrivate> privateTrack, const Dictionary*) 55 55 : ActiveDOMObject(context) 56 , m_source(0) 57 , m_readyState(MediaStreamSource::New) 58 , m_stopped(false) 59 , m_enabled(true) 60 , m_muted(false) 56 , m_privateTrack(privateTrack) 61 57 , m_eventDispatchScheduled(false) 62 58 { 63 59 suspendIfNeeded(); 64 if (source) 65 setSource(source); 60 61 if (m_privateTrack->source()) 62 m_privateTrack->source()->addObserver(this); 66 63 } 67 64 … … 71 68 suspendIfNeeded(); 72 69 73 // When the clone() method is invoked, the user agent must run the following steps: 74 // 1. Let trackClone be a newly constructed MediaStreamTrack object. 75 // 2. Initialize trackClone's id attribute to a newly generated value. 76 m_id = createCanonicalUUIDString(); 77 78 // 3. Let trackClone inherit this track's underlying source, kind, label and enabled attributes. 79 setSource(other->source()); 80 m_readyState = m_source ? m_source->readyState() : MediaStreamSource::New; 81 m_enabled = other->enabled(); 82 83 // Note: the "clone" steps don't say anything about 'muted', but 4.3.1 says: 84 // For a newly created MediaStreamTrack object, the following applies. The track is always enabled 85 // unless stated otherwise (for examlpe when cloned) and the muted state reflects the state of the 86 // source at the time the track is created. 87 m_muted = other->muted(); 88 89 m_eventDispatchScheduled =false; 90 m_stopped = other->stopped(); 70 m_privateTrack = other->privateTrack()->clone(); 71 72 if (m_privateTrack->source()) 73 m_privateTrack->source()->addObserver(this); 74 75 m_eventDispatchScheduled = false; 91 76 } 92 77 93 78 MediaStreamTrack::~MediaStreamTrack() 94 79 { 95 if (m_source)96 m_source->removeObserver(this);97 80 } 98 81 99 82 const AtomicString& MediaStreamTrack::kind() const 100 83 { 101 if (!m_source) 102 return emptyAtom; 103 104 static NeverDestroyed<AtomicString> audioKind("audio", AtomicString::ConstructFromLiteral); 105 static NeverDestroyed<AtomicString> videoKind("video", AtomicString::ConstructFromLiteral); 106 107 switch (m_source->type()) { 108 case MediaStreamSource::Audio: 109 return audioKind; 110 case MediaStreamSource::Video: 111 return videoKind; 112 } 113 114 ASSERT_NOT_REACHED(); 115 return emptyAtom; 116 } 117 118 void MediaStreamTrack::setSource(MediaStreamSource* source) 119 { 120 ASSERT(!source || !m_source); 121 122 if (m_source) 123 m_source->removeObserver(this); 124 125 if (source) { 126 source->addObserver(this); 127 m_muted = source->muted(); 128 } 129 130 m_source = source; 84 return m_privateTrack->kind(); 85 } 86 87 void MediaStreamTrack::setSource(MediaStreamSource* newSource) 88 { 89 MediaStreamSource* trackSource = source(); 90 91 if (trackSource) 92 trackSource->removeObserver(this); 93 94 if (newSource) 95 newSource->addObserver(this); 96 97 m_privateTrack->setSource(newSource); 131 98 } 132 99 133 100 const String& MediaStreamTrack::id() const 134 101 { 135 if (!m_id.isEmpty()) 136 return m_id; 137 138 // The spec says: 139 // Unless a MediaStreamTrack object is created as a part a of special purpose algorithm that 140 // specifies how the track id must be initialized, the user agent must generate a globally 141 // unique identifier string and initialize the object's id attribute to that string. 142 if (m_source && m_source->useIDForTrackID()) 143 return m_source->id(); 144 145 m_id = createCanonicalUUIDString(); 146 return m_id; 102 return m_privateTrack->id(); 147 103 } 148 104 149 105 const String& MediaStreamTrack::label() const 150 106 { 151 if (m_source) 152 return m_source->name(); 153 return emptyString(); 107 return m_privateTrack->label(); 154 108 } 155 109 156 110 bool MediaStreamTrack::enabled() const 157 111 { 158 return m_ enabled;112 return m_privateTrack->enabled(); 159 113 } 160 114 161 115 void MediaStreamTrack::setEnabled(bool enabled) 162 116 { 163 if (m_stopped) 164 return; 165 166 // 4.3.3.1 167 // ... after a MediaStreamTrack is disassociated from its track, its enabled attribute still 168 // changes value when set; it just doesn't do anything with that new value. 169 m_enabled = enabled; 170 171 if (!m_source) 172 return; 173 174 m_source->setEnabled(enabled); 117 m_privateTrack->setEnabled(enabled); 175 118 } 176 119 177 120 bool MediaStreamTrack::muted() const 178 121 { 179 if (m_stopped || !m_source) 180 return false; 181 182 return m_source->muted(); 122 return m_privateTrack->muted(); 183 123 } 184 124 185 125 bool MediaStreamTrack::readonly() const 186 126 { 187 if (m_stopped || !m_source) 188 return true; 189 190 return m_source->readonly(); 127 return m_privateTrack->readonly(); 191 128 } 192 129 193 130 bool MediaStreamTrack::remote() const 194 131 { 195 if (!m_source) 196 return false; 197 198 return m_source->remote(); 132 return m_privateTrack->remote(); 199 133 } 200 134 … … 205 139 static NeverDestroyed<AtomicString> newState("new", AtomicString::ConstructFromLiteral); 206 140 207 if (m_stopped) 208 return ended; 209 210 switch (m_readyState) { 141 switch (m_privateTrack->readyState()) { 211 142 case MediaStreamSource::Live: 212 143 return live; … … 221 152 } 222 153 223 void MediaStreamTrack::setState(MediaStreamSource::ReadyState state)224 {225 if (m_readyState == MediaStreamSource::Ended || m_readyState == state)226 return;227 228 MediaStreamSource::ReadyState oldState = m_readyState;229 m_readyState = state;230 231 if (m_readyState == MediaStreamSource::Live && oldState == MediaStreamSource::New)232 scheduleEventDispatch(Event::create(eventNames().startedEvent, false, false));233 if (m_readyState == MediaStreamSource::Ended && oldState != MediaStreamSource::Ended)234 scheduleEventDispatch(Event::create(eventNames().endedEvent, false, false));235 }236 237 154 void MediaStreamTrack::getSources(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackSourcesCallback> callback, ExceptionCode& ec) 238 155 { … … 251 168 RefPtr<MediaSourceStates> MediaStreamTrack::states() const 252 169 { 253 if (! m_source)170 if (!source()) 254 171 return 0; 255 256 return MediaSourceStates::create( m_source->states());172 173 return MediaSourceStates::create(source()->states()); 257 174 } 258 175 259 176 RefPtr<MediaStreamCapabilities> MediaStreamTrack::capabilities() const 260 177 { 261 if (! m_source)178 if (!source()) 262 179 return 0; 263 180 264 return MediaStreamCapabilities::create( m_source->capabilities());181 return MediaStreamCapabilities::create(source()->capabilities()); 265 182 } 266 183 … … 274 191 RefPtr<MediaStreamTrack> MediaStreamTrack::clone() 275 192 { 276 if ( m_source && m_source->type() == MediaStreamSource::Audio)193 if (source() && source()->type() == MediaStreamSource::Audio) 277 194 return AudioStreamTrack::create(this); 278 195 … … 282 199 void MediaStreamTrack::stopProducingData() 283 200 { 284 if (m_stopped || !m_source) 285 return; 286 287 // Set m_stopped before stopping the source because that may result in a call to sourceChangedState 288 // and we only want to dispatch the 'ended' event if necessary. 289 setState(MediaStreamSource::Ended); 290 m_stopped = true; 291 m_source->stop(); 201 if (stopped() || !source()) 202 return; 203 204 m_privateTrack->setReadyState(MediaStreamSource::Ended); 205 m_privateTrack->stop(); 292 206 } 293 207 294 208 bool MediaStreamTrack::ended() const 295 209 { 296 return m_ stopped || m_readyState == MediaStreamSource::Ended;210 return m_privateTrack->ended(); 297 211 } 298 212 … … 311 225 void MediaStreamTrack::sourceStateChanged() 312 226 { 313 if ( m_stopped)314 return; 315 316 setState(m_source->readyState());227 if (stopped()) 228 return; 229 230 m_privateTrack->setReadyState(source()->readyState()); 317 231 } 318 232 319 233 void MediaStreamTrack::sourceMutedChanged() 320 234 { 321 if (m_stopped) 322 return; 323 324 bool muted = m_source->muted(); 325 if (m_muted == muted) 326 return; 327 328 m_muted = muted; 329 if (m_muted) 330 scheduleEventDispatch(Event::create(eventNames().muteEvent, false, false)); 331 else 332 scheduleEventDispatch(Event::create(eventNames().unmuteEvent, false, false)); 235 if (stopped()) 236 return; 237 238 m_privateTrack->setMuted(source()->muted()); 333 239 334 240 configureTrackRendering(); … … 337 243 void MediaStreamTrack::sourceEnabledChanged() 338 244 { 339 if (m_stopped) 340 return; 341 245 if (stopped()) 246 return; 247 248 setEnabled(source()->enabled()); 342 249 // media from the source only flows when a MediaStreamTrack object is both unmuted and enabled 343 250 configureTrackRendering(); … … 346 253 void MediaStreamTrack::configureTrackRendering() 347 254 { 348 if ( m_stopped)255 if (stopped()) 349 256 return; 350 257 … … 355 262 bool MediaStreamTrack::stopped() 356 263 { 357 return m_ stopped;264 return m_privateTrack->stopped(); 358 265 } 359 266 360 267 void MediaStreamTrack::trackDidEnd() 361 268 { 269 m_privateTrack->setReadyState(MediaStreamSource::Ended); 270 362 271 for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) 363 272 (*i)->trackDidEnd(); … … 399 308 } 400 309 310 void MediaStreamTrack::trackReadyStateChanged() 311 { 312 if (m_privateTrack->readyState() == MediaStreamSource::Live) 313 scheduleEventDispatch(Event::create(eventNames().startedEvent, false, false)); 314 else if (m_privateTrack->readyState() == MediaStreamSource::Ended) 315 scheduleEventDispatch(Event::create(eventNames().endedEvent, false, false)); 316 } 317 318 void MediaStreamTrack::trackMutedChanged() 319 { 320 if (muted()) 321 scheduleEventDispatch(Event::create(eventNames().muteEvent, false, false)); 322 else 323 scheduleEventDispatch(Event::create(eventNames().unmuteEvent, false, false)); 324 } 325 401 326 } // namespace WebCore 402 327 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r157958 r158018 33 33 #include "EventTarget.h" 34 34 #include "MediaStreamSource.h" 35 #include "MediaStreamTrackPrivate.h" 35 36 #include "ScriptWrappable.h" 36 37 #include <wtf/RefCounted.h> … … 48 49 class MediaTrackConstraints; 49 50 50 class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamSource::Observer {51 class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamSource::Observer, public MediaStreamTrackPrivateClient { 51 52 public: 52 53 class Observer { … … 69 70 70 71 const AtomicString& readyState() const; 71 void setState(MediaStreamSource::ReadyState);72 72 73 73 static void getSources(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackSourcesCallback>, ExceptionCode&); … … 87 87 DEFINE_ATTRIBUTE_EVENT_LISTENER(overconstrained); 88 88 89 MediaStreamSource* source() const { return m_ source.get(); }89 MediaStreamSource* source() const { return m_privateTrack->source(); } 90 90 void setSource(MediaStreamSource*); 91 91 … … 94 94 void addObserver(Observer*); 95 95 void removeObserver(Observer*); 96 MediaStreamTrackPrivate* privateTrack() const { return m_privateTrack.get(); } 97 98 // MediaStreamTrackPrivateClient 99 void trackReadyStateChanged(); 100 void trackMutedChanged(); 96 101 97 102 // EventTarget … … 104 109 protected: 105 110 explicit MediaStreamTrack(MediaStreamTrack*); 106 MediaStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);111 MediaStreamTrack(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackPrivate>, const Dictionary*); 107 112 108 113 private: … … 128 133 Vector<RefPtr<Event>> m_scheduledEvents; 129 134 130 RefPtr<MediaStreamSource> m_source;131 135 RefPtr<MediaConstraintsImpl> m_constraints; 132 MediaStreamSource::ReadyState m_readyState;133 mutable String m_id;134 136 Mutex m_mutex; 135 137 136 138 Vector<Observer*> m_observers; 137 139 138 bool m_stopped; 139 bool m_enabled; 140 bool m_muted; 140 RefPtr<MediaStreamTrackPrivate> m_privateTrack; 141 141 bool m_eventDispatchScheduled; 142 142 }; -
trunk/Source/WebCore/Modules/mediastream/VideoStreamTrack.cpp
r157068 r158018 38 38 RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, const Dictionary& videoConstraints) 39 39 { 40 RefPtr<VideoStreamTrack> track = adoptRef(new VideoStreamTrack(context, 0, &videoConstraints)); 41 return track.release(); 40 return adoptRef(new VideoStreamTrack(context, MediaStreamTrackPrivate::create(0), &videoConstraints)); 42 41 } 43 42 44 RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, MediaStreamSource* source)43 RefPtr<VideoStreamTrack> VideoStreamTrack::create(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackPrivate> privateTrack) 45 44 { 46 RefPtr<VideoStreamTrack> track = adoptRef(new VideoStreamTrack(context, source, 0)); 47 return track.release(); 45 return adoptRef(new VideoStreamTrack(context, privateTrack, 0)); 48 46 } 49 47 … … 53 51 } 54 52 55 VideoStreamTrack::VideoStreamTrack(ScriptExecutionContext* context, MediaStreamSource* source, const Dictionary* videoConstraints)56 : MediaStreamTrack(context, source, videoConstraints)53 VideoStreamTrack::VideoStreamTrack(ScriptExecutionContext* context, PassRefPtr<MediaStreamTrackPrivate> privateTrack, const Dictionary* videoConstraints) 54 : MediaStreamTrack(context, privateTrack, videoConstraints) 57 55 { 58 56 } -
trunk/Source/WebCore/Modules/mediastream/VideoStreamTrack.h
r157068 r158018 37 37 class MediaStreamSource; 38 38 class ScriptExecutionContext; 39 class MediaStremTrackDescriptor; 39 40 40 41 class VideoStreamTrack FINAL : public MediaStreamTrack { 41 42 public: 42 43 static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, const Dictionary&); 43 static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, MediaStreamSource*);44 static RefPtr<VideoStreamTrack> create(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackPrivate>); 44 45 static RefPtr<VideoStreamTrack> create(MediaStreamTrack*); 45 46 … … 49 50 50 51 private: 51 VideoStreamTrack(ScriptExecutionContext*, MediaStreamSource*, const Dictionary*);52 VideoStreamTrack(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackPrivate>, const Dictionary*); 52 53 explicit VideoStreamTrack(MediaStreamTrack*); 53 54 }; -
trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp
r157958 r158018 38 38 #include "MediaStreamCenter.h" 39 39 #include "MediaStreamSource.h" 40 #include "MediaStreamTrackPrivate.h" 40 41 #include "UUID.h" 41 42 #include <wtf/RefCounted.h> … … 104 105 { 105 106 ASSERT(m_id.length()); 106 for (size_t i = 0; i < audioSources.size(); i++) 107 for (size_t i = 0; i < audioSources.size(); i++) { 107 108 m_audioStreamSources.append(audioSources[i]); 109 m_audioTrackDescriptors.append(MediaStreamTrackPrivate::create(audioSources[i])); 110 } 108 111 109 for (size_t i = 0; i < videoSources.size(); i++) 112 for (size_t i = 0; i < videoSources.size(); i++) { 110 113 m_videoStreamSources.append(videoSources[i]); 114 m_videoTrackDescriptors.append(MediaStreamTrackPrivate::create(videoSources[i])); 115 } 111 116 } 112 117 … … 119 124 } 120 125 126 void MediaStreamDescriptor::addTrack(PassRefPtr<MediaStreamTrackPrivate> track) 127 { 128 Vector<RefPtr<MediaStreamTrackPrivate>>& tracks = track->type() == MediaStreamSource::Audio ? m_audioTrackDescriptors : m_videoTrackDescriptors; 129 130 size_t pos = tracks.find(track); 131 if (pos != notFound) 132 return; 133 134 tracks.append(track); 135 } 136 137 void MediaStreamDescriptor::removeTrack(PassRefPtr<MediaStreamTrackPrivate> track) 138 { 139 Vector<RefPtr<MediaStreamTrackPrivate>>& tracks = track->type() == MediaStreamSource::Audio ? m_audioTrackDescriptors : m_videoTrackDescriptors; 140 141 size_t pos = tracks.find(track); 142 if (pos == notFound) 143 return; 144 145 tracks.remove(pos); 146 } 147 121 148 } // namespace WebCore 122 149 -
trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h
r157958 r158018 42 42 namespace WebCore { 43 43 44 class MediaStreamTrackPrivate; 45 44 46 class MediaStreamDescriptorClient : public MediaStreamTrack::Observer { 45 47 public: … … 64 66 String id() const { return m_id; } 65 67 66 unsigned numberOfAudioS treams() const { return m_audioStreamSources.size(); }67 MediaStreamSource* audioS treams(unsigned index) const { return m_audioStreamSources[index].get(); }68 unsigned numberOfAudioSources() const { return m_audioStreamSources.size(); } 69 MediaStreamSource* audioSources(unsigned index) const { return m_audioStreamSources[index].get(); } 68 70 69 unsigned numberOfVideoStreams() const { return m_videoStreamSources.size(); } 70 MediaStreamSource* videoStreams(unsigned index) const { return m_videoStreamSources[index].get(); } 71 unsigned numberOfVideoSources() const { return m_videoStreamSources.size(); } 72 MediaStreamSource* videoSources(unsigned index) const { return m_videoStreamSources[index].get(); } 73 74 unsigned numberOfAudioTracks() const { return m_audioTrackDescriptors.size(); } 75 MediaStreamTrackPrivate* audioTracks(unsigned index) const { return m_audioTrackDescriptors[index].get(); } 76 77 unsigned numberOfVideoTracks() const { return m_videoTrackDescriptors.size(); } 78 MediaStreamTrackPrivate* videoTracks(unsigned index) const { return m_videoTrackDescriptors[index].get(); } 71 79 72 80 void addSource(PassRefPtr<MediaStreamSource>); … … 79 87 void setEnded(); 80 88 89 void addTrack(PassRefPtr<MediaStreamTrackPrivate>); 90 void removeTrack(PassRefPtr<MediaStreamTrackPrivate>); 91 81 92 private: 82 93 MediaStreamDescriptor(const String& id, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources, bool ended); … … 86 97 Vector<RefPtr<MediaStreamSource>> m_audioStreamSources; 87 98 Vector<RefPtr<MediaStreamSource>> m_videoStreamSources; 99 100 Vector<RefPtr<MediaStreamTrackPrivate>> m_audioTrackDescriptors; 101 Vector<RefPtr<MediaStreamTrackPrivate>> m_videoTrackDescriptors; 88 102 bool m_ended; 89 103 };
Note: See TracChangeset
for help on using the changeset viewer.