Title: [212846] trunk
Revision
212846
Author
jer.no...@apple.com
Date
2017-02-22 12:46:32 -0800 (Wed, 22 Feb 2017)

Log Message

Source/WebCore:
MediaStreamSourceNode never receives audio from MockRealtimeAudioSourceMac.
https://bugs.webkit.org/show_bug.cgi?id=168731

Reviewed by Eric Carlson.

Test: fast/mediastream/mock-media-source-webaudio.html

Because the audioSourceProvider can be created before the mock source is configured, explicitly configure the
source if necessary after creating the audioSourceProvider.

* platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
(WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):

LayoutTests:
MediaStreamSourceNode never receives audio from a getUserMedia() created stream
https://bugs.webkit.org/show_bug.cgi?id=168731

Reviewed by Eric Carlson.

* fast/mediastream/mock-media-source-webaudio-expected.txt: Added.
* fast/mediastream/mock-media-source-webaudio.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (212845 => 212846)


--- trunk/LayoutTests/ChangeLog	2017-02-22 20:44:30 UTC (rev 212845)
+++ trunk/LayoutTests/ChangeLog	2017-02-22 20:46:32 UTC (rev 212846)
@@ -1,3 +1,13 @@
+2017-02-22  Jer Noble  <jer.no...@apple.com>
+
+        MediaStreamSourceNode never receives audio from a getUserMedia() created stream
+        https://bugs.webkit.org/show_bug.cgi?id=168731
+
+        Reviewed by Eric Carlson.
+
+        * fast/mediastream/mock-media-source-webaudio-expected.txt: Added.
+        * fast/mediastream/mock-media-source-webaudio.html: Added.
+
 2017-02-22  Chris Dumez  <cdu...@apple.com>
 
         Do not aggressively throttle DOM timers until they've reached their max nesting level

Added: trunk/LayoutTests/fast/mediastream/mock-media-source-webaudio-expected.txt (0 => 212846)


--- trunk/LayoutTests/fast/mediastream/mock-media-source-webaudio-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/mediastream/mock-media-source-webaudio-expected.txt	2017-02-22 20:46:32 UTC (rev 212846)
@@ -0,0 +1,3 @@
+
+PASS Basic getUserMedia to Web Audio test 
+

Added: trunk/LayoutTests/fast/mediastream/mock-media-source-webaudio.html (0 => 212846)


--- trunk/LayoutTests/fast/mediastream/mock-media-source-webaudio.html	                        (rev 0)
+++ trunk/LayoutTests/fast/mediastream/mock-media-source-webaudio.html	2017-02-22 20:46:32 UTC (rev 212846)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>Testing local audio capture playback causes "playing" event to fire</title>
+    <script src=""
+    <script src=""
+</head>
+<body>
+    <script>
+    if (window.testRunner)
+        testRunner.setUserMediaPermission(true);
+
+    var heardHum = false;
+    var heardBop = false;
+    var heardBip = false;
+
+    var test = async_test(() => {
+        navigator.mediaDevices.getUserMedia({audio: true}).then((stream) => {
+            var context = new webkitAudioContext();
+            var sourceNode = context.createMediaStreamSource(stream);
+            var analyser = context.createAnalyser();
+            var gain = context.createGain();
+
+            analyser.fftSize = 2048;
+            analyser.smoothingTimeConstant = 0;
+            analyser.minDecibels = -100;
+            analyser.maxDecibels = 0;
+            gain.gain.value = 0;
+
+            sourceNode.connect(analyser);
+            analyser.connect(gain);
+            gain.connect(context.destination);
+
+            function analyse() {
+                var freqDomain = new Uint8Array(analyser.frequencyBinCount);
+                analyser.getByteFrequencyData(freqDomain);
+
+                var hasFrequency = expectedFrequency => {
+                    var bin = Math.floor(expectedFrequency * analyser.fftSize / context.sampleRate);
+                    return bin < freqDomain.length && freqDomain[bin] >= 150;
+                };
+
+                if (!heardHum)
+                    heardHum = hasFrequency(150);
+
+                if (!heardBip)
+                    heardBip = hasFrequency(1500);
+
+                if (!heardBop)
+                    heardBop = hasFrequency(500);
+
+                if (heardHum && heardBip && heardBop)
+                    done();
+            };
+
+            var done = () => {
+                clearTimeout(timeout);
+                clearInterval(interval);
+
+                assert_true(heardHum);
+                assert_true(heardBip);
+                assert_true(heardBop);
+                test.done();
+            };
+
+            var timeout = setTimeout(done, 3000);
+            var interval = setInterval(analyse, 1000 / 30);
+            analyse();
+        });
+    }, "Basic getUserMedia to Web Audio test");
+    </script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (212845 => 212846)


--- trunk/Source/WebCore/ChangeLog	2017-02-22 20:44:30 UTC (rev 212845)
+++ trunk/Source/WebCore/ChangeLog	2017-02-22 20:46:32 UTC (rev 212846)
@@ -1,3 +1,18 @@
+2017-02-22  Jer Noble  <jer.no...@apple.com>
+
+        MediaStreamSourceNode never receives audio from MockRealtimeAudioSourceMac.
+        https://bugs.webkit.org/show_bug.cgi?id=168731
+
+        Reviewed by Eric Carlson.
+
+        Test: fast/mediastream/mock-media-source-webaudio.html
+
+        Because the audioSourceProvider can be created before the mock source is configured, explicitly configure the
+        source if necessary after creating the audioSourceProvider.
+
+        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
+        (WebCore::MockRealtimeAudioSourceMac::audioSourceProvider):
+
 2017-02-22  Chris Dumez  <cdu...@apple.com>
 
         Do not aggressively throttle DOM timers until they've reached their max nesting level

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm (212845 => 212846)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-02-22 20:44:30 UTC (rev 212845)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-02-22 20:46:32 UTC (rev 212846)
@@ -203,6 +203,9 @@
 AudioSourceProvider* MockRealtimeAudioSourceMac::audioSourceProvider()
 {
     if (!m_audioSourceProvider) {
+        if (!m_audioBufferList)
+            reconfigure();
+
         m_audioSourceProvider = WebAudioSourceProviderAVFObjC::create(*this);
         m_audioSourceProvider->prepare(&m_streamFormat);
     }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to