Bug 1431810 - Test that opus phase inversion is disabled on mono output. r?kinetik
MozReview-Commit-ID: 4Q4E4MUF2iW
--- a/dom/media/test/mochitest.ini
+++ b/dom/media/test/mochitest.ini
@@ -602,16 +602,18 @@ support-files =
test-5-5.0.opus
test-5-5.0.opus^headers^
test-6-5.1.opus
test-6-5.1.opus^headers^
test-7-6.1.opus
test-7-6.1.opus^headers^
test-8-7.1.opus
test-8-7.1.opus^headers^
+ test-stereo-phase-inversion-180.opus
+ test-stereo-phase-inversion-180.opus^headers^
variable-channel.ogg
variable-channel.ogg^headers^
variable-channel.opus
variable-channel.opus^headers^
variable-preskip.opus
variable-preskip.opus^headers^
variable-samplerate.ogg
variable-samplerate.ogg^headers^
@@ -1268,8 +1270,10 @@ skip-if = (os == 'win' || android_versio
skip-if = toolkit != 'android' || android_version < '16'
tags = hls
[test_hls_player_independency.html]
# There's a limit for creating decoder when API lever < 18(Bug 1278574)
# We could skip the test in that case as we cannot play 2 video at a time.
skip-if = toolkit != 'android' || android_version < '18'
tags = hls
+
+[test_bug1431810_opus_downmix_to_mono.html]
new file mode 100644
index 0000000000000000000000000000000000000000..ce70290002dcb78733f7cd3f82e9dc856f20ccb7
GIT binary patch
literal 14011
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
S(#m8J5kJ?=L*yCC0RJD)$L7KS
new file mode 100644
--- /dev/null
+++ b/dom/media/test/test-stereo-phase-inversion-180.opus^headers^
@@ -0,0 +1,1 @@
+Cache-Control: no-store
new file mode 100644
--- /dev/null
+++ b/dom/media/test/test_bug1431810_opus_downmix_to_mono.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Media test: disable phase inversion in opus decoder</title>
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<audio preload=none id="a" controls></audio>
+<audio preload=none id="b" controls></audio>
+<script class="testbody" type="text/javascript">
+/*
+ This test makes use of an (stereo) opus file with phase inversion of 180 degrees (right = -left => right + left = 0).
+ Firstly, the phase inversion is verified on a normal stereo playback.
+ Secondly, mono playback is forced which results in the phase inversion being disabled (Bug 1431810).
+*/
+SimpleTest.waitForExplicitFinish();
+
+function areChannelsInverted(b1, b2) {
+ for (var i = 0; i < b1.length; i++) {
+ if (Math.abs(b1[i] + b2[i]) > 9e-2) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function areChannelsEqual(b1, b2) {
+ for (var i = 0; i < b1.length; i++) {
+ if (Math.abs(b1[i] - b2[i]) > 9e-3) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function isSilent(b) {
+ for (var i = 0; i < b.length; i++) {
+ if (b[i] != 0.0) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function mediaElementWithPhaseInversion(audioContext, mediaElement, success) {
+ let audio_source = audioContext.createMediaElementSource(mediaElement);
+ let script_processor = audioContext.createScriptProcessor();
+ audio_source.connect(script_processor);
+
+ mediaElement.onplay = () => {
+ script_processor.onaudioprocess = (e) => {
+ let right = e.inputBuffer.getChannelData(0);
+ let left = e.inputBuffer.getChannelData(1);
+
+ // This is leading or trailing silence
+ // produced by ScriptProcessor.
+ if (isSilent(right) && isSilent(left)) {
+ return;
+ }
+
+ ok(areChannelsInverted(right, left), "Channels must be inverted");
+ }
+ }
+
+ mediaElement.onended = () => {
+ ok(true, "End of file.");
+ mediaElement.onended = null;
+ script_processor.onaudioprocess = null;
+ success();
+ }
+
+ mediaElement.src = "test-stereo-phase-inversion-180.opus";
+ // Normal playback channels will by inverted
+ mediaElement.play();
+}
+
+function mediaElementWithPhaseInversionDisabled(audioContext, mediaElement, success) {
+ let audio_source = audioContext.createMediaElementSource(mediaElement);
+ let script_processor = audioContext.createScriptProcessor();
+ audio_source.connect(script_processor);
+
+ mediaElement.onplay = () => {
+ script_processor.onaudioprocess = (e) => {
+ let right = e.inputBuffer.getChannelData(0);
+ let left = e.inputBuffer.getChannelData(1);
+
+ // This is leading or trailing silence
+ // produced by ScriptProcessor.
+ if (isSilent(right) && isSilent(left)) {
+ return;
+ }
+
+ ok(!areChannelsInverted(right, left), "Channels must not be inverted");
+ ok(areChannelsEqual(right, left), "Channels must be equal");
+ }
+ }
+
+ mediaElement.onended = () => {
+ ok(true, "End of file.");
+ mediaElement.onended = null;
+ script_processor.onaudioprocess = null;
+ success();
+ }
+
+ mediaElement.src = "test-stereo-phase-inversion-180.opus";
+
+ // Downmix to mono will force to disable opus phase inversion
+ SpecialPowers.pushPrefEnv({"set": [["accessibility.monoaudio.enable", true]]})
+ .then(() => {
+ mediaElement.play();
+ });
+}
+
+let ac = new AudioContext();
+
+function testPhaseInversion(mediaElement) {
+ return new Promise((accept, reject) => {
+ mediaElementWithPhaseInversion(ac, a, accept);
+ });
+}
+
+function testPhaseInversionDisabled(mediaElement) {
+ return new Promise((accept, reject) => {
+ mediaElementWithPhaseInversionDisabled(ac, b, accept);
+ });
+}
+
+// Start testing
+testPhaseInversion(a)
+.then( () => testPhaseInversionDisabled(b) )
+.then( () => SimpleTest.finish() )
+
+</script>
+</pre>
+</body>
+</html>