Title: [142773] trunk
Revision
142773
Author
[email protected]
Date
2013-02-13 12:32:38 -0800 (Wed, 13 Feb 2013)

Log Message

MediaStream API: Use the source id when creating new tracks
https://bugs.webkit.org/show_bug.cgi?id=109688

Reviewed by Adam Barth.

Source/Platform:

Added id to initialize and renamed audio/videoSources to audio/videoTracks.

* chromium/public/WebMediaStream.h:
(WebKit):
(WebMediaStream):
(WebKit::WebMediaStream::audioSources):
(WebKit::WebMediaStream::videoSources):
* chromium/public/WebMediaStreamTrack.h:
(WebMediaStreamTrack):

Source/WebCore:

This patch reuses the ids from the source when creating tracks instead of creating a new one.
This was requested by the chromium port to greatly simplify their implementation.
In the longer run the API should be rewritten to only use tracks instead of sources.

Covered by existing tests.

* platform/chromium/support/WebMediaStream.cpp:
(WebKit::WebMediaStream::audioTracks):
(WebKit::WebMediaStream::videoTracks):
(WebKit::WebMediaStream::initialize):
(WebKit):
* platform/chromium/support/WebMediaStreamTrack.cpp:
(WebKit::WebMediaStreamTrack::initialize):
(WebKit):
* platform/mediastream/MediaStreamComponent.h:
(WebCore::MediaStreamComponent::create):
(MediaStreamComponent):
(WebCore::MediaStreamComponent::MediaStreamComponent):
(WebCore):
* platform/mediastream/MediaStreamDescriptor.h:
(WebCore::MediaStreamDescriptor::create):
(MediaStreamDescriptor):
(WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

Tools:

Switching mock to new API.

* DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp:
(WebTestRunner::WebUserMediaClientMock::requestUserMedia):

Modified Paths

Diff

Modified: trunk/Source/Platform/ChangeLog (142772 => 142773)


--- trunk/Source/Platform/ChangeLog	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/Platform/ChangeLog	2013-02-13 20:32:38 UTC (rev 142773)
@@ -1,3 +1,20 @@
+2013-02-13  Tommy Widenflycht  <[email protected]>
+
+        MediaStream API: Use the source id when creating new tracks
+        https://bugs.webkit.org/show_bug.cgi?id=109688
+
+        Reviewed by Adam Barth.
+
+        Added id to initialize and renamed audio/videoSources to audio/videoTracks.
+
+        * chromium/public/WebMediaStream.h:
+        (WebKit):
+        (WebMediaStream):
+        (WebKit::WebMediaStream::audioSources):
+        (WebKit::WebMediaStream::videoSources):
+        * chromium/public/WebMediaStreamTrack.h:
+        (WebMediaStreamTrack):
+
 2013-02-11  James Robinson  <[email protected]>
 
         [chromium] Add WebUnitTestSupport::createLayerTreeViewForTesting for webkit_unit_tests

Modified: trunk/Source/Platform/chromium/public/WebMediaStream.h (142772 => 142773)


--- trunk/Source/Platform/chromium/public/WebMediaStream.h	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/Platform/chromium/public/WebMediaStream.h	2013-02-13 20:32:38 UTC (rev 142773)
@@ -36,8 +36,8 @@
 
 namespace WebKit {
 
+class WebMediaStreamSource;
 class WebMediaStreamTrack;
-class WebMediaStreamSource;
 class WebString;
 
 class WebMediaStream {
@@ -59,7 +59,11 @@
 
     WEBKIT_EXPORT void assign(const WebMediaStream&);
 
+    // DEPRECATED
     WEBKIT_EXPORT void initialize(const WebString& label, const WebVector<WebMediaStreamSource>& audioSources, const WebVector<WebMediaStreamSource>& videoSources);
+
+    WEBKIT_EXPORT void initialize(const WebString& label, const WebVector<WebMediaStreamTrack>& audioTracks, const WebVector<WebMediaStreamTrack>& videoTracks);
+
     WEBKIT_EXPORT void reset();
     bool isNull() const { return m_private.isNull(); }
 
@@ -68,9 +72,13 @@
 
     WEBKIT_EXPORT WebString id() const;
 
-    WEBKIT_EXPORT void audioSources(WebVector<WebMediaStreamTrack>&) const;
-    WEBKIT_EXPORT void videoSources(WebVector<WebMediaStreamTrack>&) const;
+    WEBKIT_EXPORT void audioTracks(WebVector<WebMediaStreamTrack>&) const;
+    WEBKIT_EXPORT void videoTracks(WebVector<WebMediaStreamTrack>&) const;
 
+    // DEPRECATED
+    void audioSources(WebVector<WebMediaStreamTrack>& tracks) const { audioTracks(tracks); }
+    void videoSources(WebVector<WebMediaStreamTrack>& tracks) const { videoTracks(tracks); }
+
     // Extra data associated with this WebMediaStream.
     // If non-null, the extra data pointer will be deleted when the object is destroyed.
     // Setting the extra data pointer will cause any existing non-null

Modified: trunk/Source/Platform/chromium/public/WebMediaStreamTrack.h (142772 => 142773)


--- trunk/Source/Platform/chromium/public/WebMediaStreamTrack.h	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/Platform/chromium/public/WebMediaStreamTrack.h	2013-02-13 20:32:38 UTC (rev 142773)
@@ -50,7 +50,10 @@
         return *this;
     }
     WEBKIT_EXPORT void assign(const WebMediaStreamTrack&);
+
     WEBKIT_EXPORT void initialize(const WebMediaStreamSource&);
+    WEBKIT_EXPORT void initialize(const WebString& id, const WebMediaStreamSource&);
+
     WEBKIT_EXPORT void reset();
     bool isNull() const { return m_private.isNull(); }
 

Modified: trunk/Source/WebCore/ChangeLog (142772 => 142773)


--- trunk/Source/WebCore/ChangeLog	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/WebCore/ChangeLog	2013-02-13 20:32:38 UTC (rev 142773)
@@ -1,3 +1,34 @@
+2013-02-13  Tommy Widenflycht  <[email protected]>
+
+        MediaStream API: Use the source id when creating new tracks
+        https://bugs.webkit.org/show_bug.cgi?id=109688
+
+        Reviewed by Adam Barth.
+
+        This patch reuses the ids from the source when creating tracks instead of creating a new one.
+        This was requested by the chromium port to greatly simplify their implementation.
+        In the longer run the API should be rewritten to only use tracks instead of sources.
+
+        Covered by existing tests.
+
+        * platform/chromium/support/WebMediaStream.cpp:
+        (WebKit::WebMediaStream::audioTracks):
+        (WebKit::WebMediaStream::videoTracks):
+        (WebKit::WebMediaStream::initialize):
+        (WebKit):
+        * platform/chromium/support/WebMediaStreamTrack.cpp:
+        (WebKit::WebMediaStreamTrack::initialize):
+        (WebKit):
+        * platform/mediastream/MediaStreamComponent.h:
+        (WebCore::MediaStreamComponent::create):
+        (MediaStreamComponent):
+        (WebCore::MediaStreamComponent::MediaStreamComponent):
+        (WebCore):
+        * platform/mediastream/MediaStreamDescriptor.h:
+        (WebCore::MediaStreamDescriptor::create):
+        (MediaStreamDescriptor):
+        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
+
 2013-02-13  Eric Seidel  <[email protected]>
 
         Use fancy new Vector-based String constructors in the WebVTT parser

Modified: trunk/Source/WebCore/platform/chromium/support/WebMediaStream.cpp (142772 => 142773)


--- trunk/Source/WebCore/platform/chromium/support/WebMediaStream.cpp	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/WebCore/platform/chromium/support/WebMediaStream.cpp	2013-02-13 20:32:38 UTC (rev 142773)
@@ -94,22 +94,22 @@
     m_private->setExtraData(adoptRef(new ExtraDataContainer(extraData)));
 }
 
-void WebMediaStream::audioSources(WebVector<WebMediaStreamTrack>& webSources) const
+void WebMediaStream::audioTracks(WebVector<WebMediaStreamTrack>& webTracks) const
 {
-    size_t numberOfSources = m_private->numberOfAudioComponents();
-    WebVector<WebMediaStreamTrack> result(numberOfSources);
-    for (size_t i = 0; i < numberOfSources; ++i)
+    size_t numberOfTracks = m_private->numberOfAudioComponents();
+    WebVector<WebMediaStreamTrack> result(numberOfTracks);
+    for (size_t i = 0; i < numberOfTracks; ++i)
         result[i] = m_private->audioComponent(i);
-    webSources.swap(result);
+    webTracks.swap(result);
 }
 
-void WebMediaStream::videoSources(WebVector<WebMediaStreamTrack>& webSources) const
+void WebMediaStream::videoTracks(WebVector<WebMediaStreamTrack>& webTracks) const
 {
-    size_t numberOfSources = m_private->numberOfVideoComponents();
-    WebVector<WebMediaStreamTrack> result(numberOfSources);
-    for (size_t i = 0; i < numberOfSources; ++i)
+    size_t numberOfTracks = m_private->numberOfVideoComponents();
+    WebVector<WebMediaStreamTrack> result(numberOfTracks);
+    for (size_t i = 0; i < numberOfTracks; ++i)
         result[i] = m_private->videoComponent(i);
-    webSources.swap(result);
+    webTracks.swap(result);
 }
 
 WebMediaStream& WebMediaStream::operator=(const PassRefPtr<WebCore::MediaStreamDescriptor>& mediaStreamDescriptor)
@@ -130,18 +130,32 @@
 
 void WebMediaStream::initialize(const WebString& label, const WebVector<WebMediaStreamSource>& audioSources, const WebVector<WebMediaStreamSource>& videoSources)
 {
-    MediaStreamSourceVector audio, video;
+    MediaStreamComponentVector audio, video;
     for (size_t i = 0; i < audioSources.size(); ++i) {
-        MediaStreamSource* curr = audioSources[i];
-        audio.append(curr);
+        MediaStreamSource* source = audioSources[i];
+        audio.append(MediaStreamComponent::create(source->id(), source));
     }
     for (size_t i = 0; i < videoSources.size(); ++i) {
-        MediaStreamSource* curr = videoSources[i];
-        video.append(curr);
+        MediaStreamSource* source = videoSources[i];
+        video.append(MediaStreamComponent::create(source->id(), source));
     }
     m_private = MediaStreamDescriptor::create(label, audio, video);
 }
 
+void WebMediaStream::initialize(const WebString& label, const WebVector<WebMediaStreamTrack>& audioTracks, const WebVector<WebMediaStreamTrack>& videoTracks)
+{
+    MediaStreamComponentVector audio, video;
+    for (size_t i = 0; i < audioTracks.size(); ++i) {
+        MediaStreamComponent* component = audioTracks[i];
+        audio.append(component);
+    }
+    for (size_t i = 0; i < videoTracks.size(); ++i) {
+        MediaStreamComponent* component = videoTracks[i];
+        video.append(component);
+    }
+    m_private = MediaStreamDescriptor::create(label, audio, video);
+}
+
 void WebMediaStream::assign(const WebMediaStream& other)
 {
     m_private = other.m_private;

Modified: trunk/Source/WebCore/platform/chromium/support/WebMediaStreamTrack.cpp (142772 => 142773)


--- trunk/Source/WebCore/platform/chromium/support/WebMediaStreamTrack.cpp	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/WebCore/platform/chromium/support/WebMediaStreamTrack.cpp	2013-02-13 20:32:38 UTC (rev 142773)
@@ -59,6 +59,11 @@
     m_private = MediaStreamComponent::create(source);
 }
 
+void WebMediaStreamTrack::initialize(const WebString& id, const WebMediaStreamSource& source)
+{
+    m_private = MediaStreamComponent::create(id, source);
+}
+
 void WebMediaStreamTrack::reset()
 {
     m_private.reset();

Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamComponent.h (142772 => 142773)


--- trunk/Source/WebCore/platform/mediastream/MediaStreamComponent.h	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamComponent.h	2013-02-13 20:32:38 UTC (rev 142773)
@@ -44,12 +44,17 @@
 public:
     static PassRefPtr<MediaStreamComponent> create(PassRefPtr<MediaStreamSource> source)
     {
-        return adoptRef(new MediaStreamComponent(0, source));
+        return adoptRef(new MediaStreamComponent(createCanonicalUUIDString(), 0, source));
     }
 
+    static PassRefPtr<MediaStreamComponent> create(const String& id, PassRefPtr<MediaStreamSource> source)
+    {
+        return adoptRef(new MediaStreamComponent(id, 0, source));
+    }
+
     static PassRefPtr<MediaStreamComponent> create(MediaStreamDescriptor* stream, PassRefPtr<MediaStreamSource> source)
     {
-        return adoptRef(new MediaStreamComponent(stream, source));
+        return adoptRef(new MediaStreamComponent(createCanonicalUUIDString(), stream, source));
     }
 
     MediaStreamDescriptor* stream() const { return m_stream; }
@@ -62,12 +67,13 @@
     void setEnabled(bool enabled) { m_enabled = enabled; }
 
 private:
-    MediaStreamComponent(MediaStreamDescriptor* stream, PassRefPtr<MediaStreamSource> source)
+    MediaStreamComponent(const String& id, MediaStreamDescriptor* stream, PassRefPtr<MediaStreamSource> source)
         : m_stream(stream)
         , m_source(source)
-        , m_id(createCanonicalUUIDString())
+        , m_id(id)
         , m_enabled(true)
     {
+        ASSERT(m_id.length());
     }
 
     MediaStreamDescriptor* m_stream;
@@ -76,6 +82,8 @@
     bool m_enabled;
 };
 
+typedef Vector<RefPtr<MediaStreamComponent> > MediaStreamComponentVector;
+
 } // namespace WebCore
 
 #endif // ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h (142772 => 142773)


--- trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h	2013-02-13 20:32:38 UTC (rev 142773)
@@ -61,6 +61,11 @@
         return adoptRef(new MediaStreamDescriptor(id, audioSources, videoSources));
     }
 
+    static PassRefPtr<MediaStreamDescriptor> create(const String& id, const MediaStreamComponentVector& audioComponents, const MediaStreamComponentVector& videoComponents)
+    {
+        return adoptRef(new MediaStreamDescriptor(id, audioComponents, videoComponents));
+    }
+
     MediaStreamDescriptorClient* client() const { return m_client; }
     void setClient(MediaStreamDescriptorClient* client) { m_client = client; }
 
@@ -98,6 +103,7 @@
         , m_id(id)
         , m_ended(false)
     {
+        ASSERT(m_id.length());
         for (size_t i = 0; i < audioSources.size(); i++)
             m_audioComponents.append(MediaStreamComponent::create(this, audioSources[i]));
 
@@ -105,6 +111,22 @@
             m_videoComponents.append(MediaStreamComponent::create(this, videoSources[i]));
     }
 
+    MediaStreamDescriptor(const String& id, const MediaStreamComponentVector& audioComponents, const MediaStreamComponentVector& videoComponents)
+        : m_client(0)
+        , m_id(id)
+        , m_ended(false)
+    {
+        ASSERT(m_id.length());
+        for (MediaStreamComponentVector::const_iterator iter = audioComponents.begin(); iter != audioComponents.end(); ++iter) {
+            (*iter)->setStream(this);
+            m_audioComponents.append((*iter));
+        }
+        for (MediaStreamComponentVector::const_iterator iter = videoComponents.begin(); iter != videoComponents.end(); ++iter) {
+            (*iter)->setStream(this);
+            m_videoComponents.append((*iter));
+        }
+    }
+
     MediaStreamDescriptorClient* m_client;
     String m_id;
     Vector<RefPtr<MediaStreamComponent> > m_audioComponents;

Modified: trunk/Tools/ChangeLog (142772 => 142773)


--- trunk/Tools/ChangeLog	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Tools/ChangeLog	2013-02-13 20:32:38 UTC (rev 142773)
@@ -1,3 +1,15 @@
+2013-02-13  Tommy Widenflycht  <[email protected]>
+
+        MediaStream API: Use the source id when creating new tracks
+        https://bugs.webkit.org/show_bug.cgi?id=109688
+
+        Reviewed by Adam Barth.
+
+        Switching mock to new API.
+
+        * DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp:
+        (WebTestRunner::WebUserMediaClientMock::requestUserMedia):
+
 2013-02-13  Brent Fulgham  <[email protected]>
 
         [Windows] Unreviewed VS2010 fix to add $(ConfigurationBuildDir)/private

Modified: trunk/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp (142772 => 142773)


--- trunk/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp	2013-02-13 20:23:49 UTC (rev 142772)
+++ trunk/Tools/DumpRenderTree/chromium/TestRunner/src/WebUserMediaClientMock.cpp	2013-02-13 20:32:38 UTC (rev 142773)
@@ -39,6 +39,7 @@
 #include <public/WebMediaConstraints.h>
 #include <public/WebMediaStream.h>
 #include <public/WebMediaStreamSource.h>
+#include <public/WebMediaStreamTrack.h>
 #include <public/WebVector.h>
 
 using namespace WebKit;
@@ -102,17 +103,23 @@
 
     const size_t zero = 0;
     const size_t _one_ = 1;
-    WebVector<WebMediaStreamSource> audioSources(request.audio() ? one : zero);
-    WebVector<WebMediaStreamSource> videoSources(request.video() ? one : zero);
+    WebVector<WebMediaStreamTrack> audioTracks(request.audio() ? one : zero);
+    WebVector<WebMediaStreamTrack> videoTracks(request.video() ? one : zero);
 
-    if (request.audio())
-        audioSources[0].initialize("MockAudioDevice#1", WebMediaStreamSource::TypeAudio, "Mock audio device");
+    if (request.audio()) {
+        WebMediaStreamSource source;
+        source.initialize("MockAudioDevice#1", WebMediaStreamSource::TypeAudio, "Mock audio device");
+        audioTracks[0].initialize(source);
+    }
 
-    if (request.video())
-        videoSources[0].initialize("MockVideoDevice#1", WebMediaStreamSource::TypeVideo, "Mock video device");
+    if (request.video()) {
+        WebMediaStreamSource source;
+        source.initialize("MockVideoDevice#1", WebMediaStreamSource::TypeVideo, "Mock video device");
+        videoTracks[0].initialize(source);
+    }
 
     WebMediaStream stream;
-    stream.initialize("foobar", audioSources, videoSources);
+    stream.initialize("foobar", audioTracks, videoTracks);
 
     stream.setExtraData(new MockExtraData());
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to