Changeset 158337 in webkit
- Timestamp:
- Oct 30, 2013 6:15:20 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r158334 r158337 1 2013-10-30 Thiago de Barros Lacerda <thiago.lacerda@openbossa.org> 2 3 Simplifying MediaStream and MediStreamDescriptor creation 4 https://bugs.webkit.org/show_bug.cgi?id=123443 5 6 Reviewed by Eric Carlson. 7 8 The internal process of creating a MediaStream and MediaStreamDescriptor was quite confusing and spread. 9 We can take advantage of the platform implementation of MediaStreamTrack (aka MediaStreamTrackPrivate) 10 and simplify the whole process. 11 A new constructor that receives vectors of MediaStreamTrackPrivate objects were added, then the check 12 if a source already exists or if the tracks are all ended are now made in MediaStreamDescriptor. 13 14 No new tests needed. 15 16 * Modules/mediastream/MediaStream.cpp: 17 (WebCore::MediaStream::create): Removed unnecessary variables in one create method and using new 18 MediaStreamDescriptor::create method that receives vector of MediaStreamTrackPrivate objects as parameter. 19 20 * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: 21 (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Removed passing flag to 22 MediaStreamDescriptor create. 23 24 * platform/mediastream/MediaStreamDescriptor.cpp: 25 (WebCore::MediaStreamDescriptor::create): Removed EndedAtCreationFlag parameter, because this is being 26 handled inside constructor by analyzing the tracks or sources passed. 27 (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Adding new constructor that receives vector of 28 MediaStreamTrackPrivate as parameter. 29 30 (WebCore::MediaStreamDescriptor::addTrack): Changed to store the track's source in the object. 31 32 (WebCore::MediaStreamDescriptor::removeTrack): 33 * platform/mediastream/MediaStreamDescriptor.h: 34 (WebCore::MediaStreamDescriptor::numberOfAudioTracks): 35 (WebCore::MediaStreamDescriptor::audioTracks): 36 (WebCore::MediaStreamDescriptor::numberOfVideoTracks): 37 (WebCore::MediaStreamDescriptor::videoTracks): 38 * platform/mock/MockMediaStreamCenter.cpp: 39 (WebCore::MockMediaStreamCenter::createMediaStream): Removing flag that is being passed to 40 MediaStreamDescriptor's create method. 41 1 42 2013-10-30 Brent Fulgham <bfulgham@apple.com> 2 43 -
trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp
r158220 r158337 42 42 namespace WebCore { 43 43 44 static bool containsSource(MediaStreamSourceVector& sourceVector, MediaStreamSource* source)45 {46 for (size_t i = 0; i < sourceVector.size(); ++i) {47 if (source->id() == sourceVector[i]->id())48 return true;49 }50 return false;51 }52 53 static void processTrack(MediaStreamTrack* track, MediaStreamSourceVector& sourceVector)54 {55 if (track->ended())56 return;57 58 MediaStreamSource* source = track->source();59 if (!containsSource(sourceVector, source))60 sourceVector.append(source);61 }62 63 static PassRefPtr<MediaStream> createFromSourceVectors(ScriptExecutionContext* context, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources, bool ended)64 {65 MediaStreamDescriptor::EndedAtCreationFlag flag = ended ? MediaStreamDescriptor::IsEnded : MediaStreamDescriptor::IsNotEnded;66 RefPtr<MediaStreamDescriptor> descriptor = MediaStreamDescriptor::create(audioSources, videoSources, flag);67 return MediaStream::create(context, descriptor.release());68 }69 70 44 PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context) 71 45 { 72 MediaStreamSourceVector audioSources; 73 MediaStreamSourceVector videoSources; 74 75 return createFromSourceVectors(context, audioSources, videoSources, false); 46 return MediaStream::create(context, MediaStreamDescriptor::create(MediaStreamSourceVector(), MediaStreamSourceVector())); 76 47 } 77 48 … … 80 51 ASSERT(stream); 81 52 82 MediaStreamSourceVector audioSources;83 MediaStreamSourceVector videoSources;53 Vector<RefPtr<MediaStreamTrackPrivate>> audioTracks; 54 Vector<RefPtr<MediaStreamTrackPrivate>> videoTracks; 84 55 85 56 for (size_t i = 0; i < stream->m_audioTracks.size(); ++i) 86 processTrack(stream->m_audioTracks[i].get(), audioSources);57 audioTracks.append(&stream->m_audioTracks[i]->privateTrack()); 87 58 88 59 for (size_t i = 0; i < stream->m_videoTracks.size(); ++i) 89 processTrack(stream->m_videoTracks[i].get(), videoSources);90 91 return createFromSourceVectors(context, audioSources, videoSources, stream->ended());60 videoTracks.append(&stream->m_videoTracks[i]->privateTrack()); 61 62 return MediaStream::create(context, MediaStreamDescriptor::create(audioTracks, videoTracks)); 92 63 } 93 64 94 65 PassRefPtr<MediaStream> MediaStream::create(ScriptExecutionContext* context, const MediaStreamTrackVector& tracks) 95 66 { 96 MediaStreamSourceVector audioSources; 97 MediaStreamSourceVector videoSources; 98 99 bool allEnded = true; 67 Vector<RefPtr<MediaStreamTrackPrivate>> audioTracks; 68 Vector<RefPtr<MediaStreamTrackPrivate>> videoTracks; 69 100 70 for (size_t i = 0; i < tracks.size(); ++i) { 101 allEnded &= tracks[i]->ended(); 102 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioSources : videoSources); 103 } 104 105 return createFromSourceVectors(context, audioSources, videoSources, allEnded); 71 if (tracks[i]->kind() == "audio") 72 audioTracks.append(&tracks[i]->privateTrack()); 73 else 74 videoTracks.append(&tracks[i]->privateTrack()); 75 } 76 77 return MediaStream::create(context, MediaStreamDescriptor::create(audioTracks, videoTracks)); 106 78 } 107 79 -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r158220 r158337 91 91 92 92 MediaStreamSource* source() const { return m_privateTrack->source(); } 93 MediaStreamTrackPrivate& privateTrack() { return m_privateTrack.get(); } 93 94 94 95 bool ended() const; … … 108 109 MediaStreamTrack(ScriptExecutionContext*, MediaStreamTrackPrivate&, const Dictionary*); 109 110 110 MediaStreamTrackPrivate& privateTrack() { return m_privateTrack.get(); }111 111 void setSource(PassRefPtr<MediaStreamSource>); 112 112 -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp
r157268 r158337 52 52 MediaStreamSourceVector audioSources; 53 53 audioSources.append(m_source); 54 m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, MediaStreamSourceVector() , MediaStreamDescriptor::IsNotEnded));54 m_stream = MediaStream::create(context->scriptExecutionContext(), MediaStreamDescriptor::create(audioSources, MediaStreamSourceVector())); 55 55 56 56 m_source->setAudioFormat(numberOfChannels, context->sampleRate()); -
trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp
r158220 r158337 37 37 38 38 #include "MediaStreamCenter.h" 39 #include "MediaStreamSource.h"40 #include "MediaStreamTrackPrivate.h"41 39 #include "UUID.h" 42 40 #include <wtf/RefCounted.h> … … 45 43 namespace WebCore { 46 44 47 PassRefPtr<MediaStreamDescriptor> MediaStreamDescriptor::create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources , EndedAtCreationFlag flag)45 PassRefPtr<MediaStreamDescriptor> MediaStreamDescriptor::create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources) 48 46 { 49 return adoptRef(new MediaStreamDescriptor(createCanonicalUUIDString(), audioSources, videoSources, flag == IsEnded)); 47 return adoptRef(new MediaStreamDescriptor(createCanonicalUUIDString(), audioSources, videoSources)); 48 } 49 50 PassRefPtr<MediaStreamDescriptor> MediaStreamDescriptor::create(const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks) 51 { 52 return adoptRef(new MediaStreamDescriptor(createCanonicalUUIDString(), audioPrivateTracks, videoPrivateTracks)); 50 53 } 51 54 … … 105 108 } 106 109 107 MediaStreamDescriptor::MediaStreamDescriptor(const String& id, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources , bool ended)110 MediaStreamDescriptor::MediaStreamDescriptor(const String& id, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources) 108 111 : m_client(0) 109 112 , m_id(id) 110 , m_ended( ended)113 , m_ended(false) 111 114 { 112 115 ASSERT(m_id.length()); 113 for (size_t i = 0; i < audioSources.size(); i++) { 114 RefPtr<MediaStreamSource> source = audioSources[i]; 115 m_audioStreamSources.append(source); 116 m_audioTrackDescriptors.append(MediaStreamTrackPrivate::create(source)); 117 } 116 for (size_t i = 0; i < audioSources.size(); i++) 117 addTrack(MediaStreamTrackPrivate::create(audioSources[i])); 118 118 119 for (size_t i = 0; i < videoSources.size(); i++) { 120 RefPtr<MediaStreamSource> source = videoSources[i]; 121 m_videoStreamSources.append(source); 122 m_videoTrackDescriptors.append(MediaStreamTrackPrivate::create(source)); 123 } 119 for (size_t i = 0; i < videoSources.size(); i++) 120 addTrack(MediaStreamTrackPrivate::create(videoSources[i])); 121 122 unsigned providedSourcesSize = audioSources.size() + videoSources.size(); 123 unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size(); 124 // If sources were provided and no track was added to the MediaStreamDescriptor's tracks, this means 125 // that the tracks were all ended 126 if (providedSourcesSize > 0 && !tracksSize) 127 m_ended = true; 128 } 129 130 MediaStreamDescriptor::MediaStreamDescriptor(const String& id, const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks) 131 : m_client(0) 132 , m_id(id) 133 , m_ended(false) 134 { 135 ASSERT(m_id.length()); 136 for (size_t i = 0; i < audioPrivateTracks.size(); i++) 137 addTrack(audioPrivateTracks[i]); 138 139 for (size_t i = 0; i < videoPrivateTracks.size(); i++) 140 addTrack(videoPrivateTracks[i]); 141 142 unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size(); 143 unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size(); 144 // If tracks were provided and no one was added to the MediaStreamDescriptor's tracks, this means 145 // that the tracks were all ended 146 if (providedTracksSize > 0 && !tracksSize) 147 m_ended = true; 124 148 } 125 149 … … 134 158 void MediaStreamDescriptor::addTrack(PassRefPtr<MediaStreamTrackPrivate> track) 135 159 { 136 Vector<RefPtr<MediaStreamTrackPrivate>>& tracks = track->type() == MediaStreamSource::Audio ? m_audioTrackDescriptors : m_videoTrackDescriptors; 160 if (track->ended()) 161 return; 162 163 Vector<RefPtr<MediaStreamTrackPrivate>>& tracks = track->type() == MediaStreamSource::Audio ? m_audioPrivateTracks : m_videoPrivateTracks; 137 164 138 165 size_t pos = tracks.find(track); … … 141 168 142 169 tracks.append(track); 170 if (track->source()) 171 addSource(track->source()); 143 172 } 144 173 145 174 void MediaStreamDescriptor::removeTrack(PassRefPtr<MediaStreamTrackPrivate> track) 146 175 { 147 Vector<RefPtr<MediaStreamTrackPrivate>>& tracks = track->type() == MediaStreamSource::Audio ? m_audio TrackDescriptors : m_videoTrackDescriptors;176 Vector<RefPtr<MediaStreamTrackPrivate>>& tracks = track->type() == MediaStreamSource::Audio ? m_audioPrivateTracks : m_videoPrivateTracks; 148 177 149 178 size_t pos = tracks.find(track); -
trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h
r158018 r158337 37 37 #include "MediaStreamSource.h" 38 38 #include "MediaStreamTrack.h" 39 #include "MediaStreamTrackPrivate.h" 39 40 #include <wtf/RefCounted.h> 40 41 #include <wtf/Vector.h> … … 55 56 class MediaStreamDescriptor : public RefCounted<MediaStreamDescriptor> { 56 57 public: 57 enum EndedAtCreationFlag { IsNotEnded, IsEnded }; 58 59 static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources, EndedAtCreationFlag); 58 static PassRefPtr<MediaStreamDescriptor> create(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources); 59 static PassRefPtr<MediaStreamDescriptor> create(const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks); 60 60 61 61 virtual ~MediaStreamDescriptor() { } … … 72 72 MediaStreamSource* videoSources(unsigned index) const { return m_videoStreamSources[index].get(); } 73 73 74 unsigned numberOfAudioTracks() const { return m_audio TrackDescriptors.size(); }75 MediaStreamTrackPrivate* audioTracks(unsigned index) const { return m_audio TrackDescriptors[index].get(); }74 unsigned numberOfAudioTracks() const { return m_audioPrivateTracks.size(); } 75 MediaStreamTrackPrivate* audioTracks(unsigned index) const { return m_audioPrivateTracks[index].get(); } 76 76 77 unsigned numberOfVideoTracks() const { return m_video TrackDescriptors.size(); }78 MediaStreamTrackPrivate* videoTracks(unsigned index) const { return m_video TrackDescriptors[index].get(); }77 unsigned numberOfVideoTracks() const { return m_videoPrivateTracks.size(); } 78 MediaStreamTrackPrivate* videoTracks(unsigned index) const { return m_videoPrivateTracks[index].get(); } 79 79 80 80 void addSource(PassRefPtr<MediaStreamSource>); … … 91 91 92 92 private: 93 MediaStreamDescriptor(const String& id, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources, bool ended); 93 MediaStreamDescriptor(const String& id, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources); 94 MediaStreamDescriptor(const String& id, const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks); 94 95 95 96 MediaStreamDescriptorClient* m_client; 96 97 String m_id; 97 Vector<RefPtr<MediaStreamSource>>m_audioStreamSources;98 Vector<RefPtr<MediaStreamSource>>m_videoStreamSources;98 MediaStreamSourceVector m_audioStreamSources; 99 MediaStreamSourceVector m_videoStreamSources; 99 100 100 Vector<RefPtr<MediaStreamTrackPrivate>> m_audio TrackDescriptors;101 Vector<RefPtr<MediaStreamTrackPrivate>> m_video TrackDescriptors;101 Vector<RefPtr<MediaStreamTrackPrivate>> m_audioPrivateTracks; 102 Vector<RefPtr<MediaStreamTrackPrivate>> m_videoPrivateTracks; 102 103 bool m_ended; 103 104 }; -
trunk/Source/WebCore/platform/mock/MockMediaStreamCenter.cpp
r158220 r158337 230 230 } 231 231 232 client->didCreateStream(MediaStreamDescriptor::create(audioSources, videoSources , MediaStreamDescriptor::IsNotEnded));232 client->didCreateStream(MediaStreamDescriptor::create(audioSources, videoSources)); 233 233 } 234 234
Note: See TracChangeset
for help on using the changeset viewer.