Title: [125456] trunk/Source/WebCore
Revision
125456
Author
[email protected]
Date
2012-08-13 15:03:38 -0700 (Mon, 13 Aug 2012)

Log Message

AudioContext::createMediaStreamSource() must create a provider for local MediaStreams
https://bugs.webkit.org/show_bug.cgi?id=93756

Reviewed by Eric Carlson.

There are two main kinds of MediaStreams (local and from remote peers).
Internally we need to know the difference so a MediaStreamAudioSourceNode will "just work".

Tested by existing test: mediastreamaudiosourcenode.html
Full testing can only be verified by manual tests.

* Modules/mediastream/LocalMediaStream.h:
(LocalMediaStream):
* Modules/mediastream/MediaStream.h:
(WebCore::MediaStream::isLocal):
(MediaStream):
* Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::createMediaStreamSource):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (125455 => 125456)


--- trunk/Source/WebCore/ChangeLog	2012-08-13 21:51:52 UTC (rev 125455)
+++ trunk/Source/WebCore/ChangeLog	2012-08-13 22:03:38 UTC (rev 125456)
@@ -1,3 +1,24 @@
+2012-08-13  Chris Rogers  <[email protected]>
+
+        AudioContext::createMediaStreamSource() must create a provider for local MediaStreams
+        https://bugs.webkit.org/show_bug.cgi?id=93756
+
+        Reviewed by Eric Carlson.
+
+        There are two main kinds of MediaStreams (local and from remote peers).
+        Internally we need to know the difference so a MediaStreamAudioSourceNode will "just work".
+
+        Tested by existing test: mediastreamaudiosourcenode.html
+        Full testing can only be verified by manual tests.
+
+        * Modules/mediastream/LocalMediaStream.h:
+        (LocalMediaStream):
+        * Modules/mediastream/MediaStream.h:
+        (WebCore::MediaStream::isLocal):
+        (MediaStream):
+        * Modules/webaudio/AudioContext.cpp:
+        (WebCore::AudioContext::createMediaStreamSource):
+
 2012-08-13  Simon Hausmann  <[email protected]>
 
         Unreviewed, rolling out r125444.

Modified: trunk/Source/WebCore/Modules/mediastream/LocalMediaStream.h (125455 => 125456)


--- trunk/Source/WebCore/Modules/mediastream/LocalMediaStream.h	2012-08-13 21:51:52 UTC (rev 125455)
+++ trunk/Source/WebCore/Modules/mediastream/LocalMediaStream.h	2012-08-13 22:03:38 UTC (rev 125456)
@@ -40,6 +40,9 @@
 
     void stop();
 
+    // MediaStream
+    virtual bool isLocal() const OVERRIDE { return true; }
+
     // EventTarget
     virtual const AtomicString& interfaceName() const OVERRIDE;
 

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.h (125455 => 125456)


--- trunk/Source/WebCore/Modules/mediastream/MediaStream.h	2012-08-13 21:51:52 UTC (rev 125455)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.h	2012-08-13 22:03:38 UTC (rev 125456)
@@ -56,6 +56,8 @@
     MediaStreamTrackList* audioTracks() { return m_audioTracks.get(); }
     MediaStreamTrackList* videoTracks() { return m_videoTracks.get(); }
 
+    virtual bool isLocal() const { return false; }
+
     // MediaStreamDescriptorOwner
     virtual void streamEnded() OVERRIDE;
 

Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp (125455 => 125456)


--- trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2012-08-13 21:51:52 UTC (rev 125455)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2012-08-13 22:03:38 UTC (rev 125456)
@@ -401,9 +401,20 @@
     ASSERT(isMainThread());
     lazyInitialize();
 
-    // FIXME: For now we don't give it an AudioSourceProvider, so it will output silence.
-    RefPtr<MediaStreamAudioSourceNode> node = MediaStreamAudioSourceNode::create(this, mediaStream, 0);
+    AudioSourceProvider* provider = 0;
 
+    if (mediaStream->isLocal() && mediaStream->audioTracks()->length())
+        provider = destination()->localAudioInputProvider();
+    else {
+        // FIXME: get a provider for non-local MediaStreams (like from a remote peer).
+        provider = 0;
+    }
+
+    RefPtr<MediaStreamAudioSourceNode> node = MediaStreamAudioSourceNode::create(this, mediaStream, provider);
+
+    // FIXME: Only stereo streams are supported right now. We should be able to accept multi-channel streams.
+    node->setFormat(2, sampleRate());
+
     refNode(node.get()); // context keeps reference until node is disconnected
     return node;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to