Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <!DOCTYPE HTML>
2 <html>
3 <meta charset="utf-8">
4 <head>
5 <title>Test MediaStreamAudioSourceNode processing is correct</title>
6 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
8 </head>
9 <body>
10 <pre id="test">
11 <script class="testbody" type="text/javascript">
12 SimpleTest.waitForExplicitFinish();
14 function test() {
15 var audio = new Audio("small-shot.ogg");
16 var context = new AudioContext();
17 var node = context.createMediaStreamSource(audio.mozCaptureStreamUntilEnded());
18 var sp = context.createScriptProcessor(2048, 1);
19 node.connect(sp);
20 sp.connect(context.destination); // work around bug 916387
21 var expectedMinNonzeroSampleCount;
22 var expectedMaxNonzeroSampleCount;
23 var nonzeroSampleCount = 0;
24 var complete = false;
25 var iterationCount = 0;
27 // This test ensures we receive at least expectedSampleCount nonzero samples
28 function processSamples(e) {
29 if (complete) {
30 return;
31 }
33 if (iterationCount == 0) {
34 // Don't start playing the audio until the AudioContext stuff is connected
35 // and running.
36 audio.play();
37 }
38 ++iterationCount;
40 var buf = e.inputBuffer.getChannelData(0);
41 var nonzeroSamplesThisBuffer = 0;
42 for (var i = 0; i < buf.length; ++i) {
43 if (buf[i] != 0) {
44 ++nonzeroSamplesThisBuffer;
45 }
46 }
47 nonzeroSampleCount += nonzeroSamplesThisBuffer;
48 is(e.inputBuffer.numberOfChannels, 1,
49 "Checking data channel count (nonzeroSamplesThisBuffer=" +
50 nonzeroSamplesThisBuffer + ")");
51 ok(nonzeroSampleCount <= expectedMaxNonzeroSampleCount,
52 "Too many nonzero samples (got " + nonzeroSampleCount + ", expected max " + expectedMaxNonzeroSampleCount + ")");
53 if (nonzeroSampleCount >= expectedMinNonzeroSampleCount &&
54 nonzeroSamplesThisBuffer == 0) {
55 ok(true,
56 "Check received enough nonzero samples (got " + nonzeroSampleCount + ", expected min " + expectedMinNonzeroSampleCount + ")");
57 SimpleTest.finish();
58 complete = true;
59 }
60 }
62 audio.oncanplaythrough = function() {
63 // Use a fuzz factor of 100 to account for samples that just happen to be zero
64 expectedMinNonzeroSampleCount = Math.floor(audio.duration*context.sampleRate) - 100;
65 expectedMaxNonzeroSampleCount = Math.floor(audio.duration*context.sampleRate) + 500;
66 sp.onaudioprocess = processSamples;
67 };
68 }
70 SpecialPowers.pushPrefEnv({"set": [["media.preload.default", 2], ["media.preload.auto", 3]]}, test);
72 </script>
73 </pre>
74 </body>
75 </html>