blob: c156d436bcc047248d04965c523829e85fc81ddc [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body onload="start()">
<p id="description"></p>
<div id="console"></div>
<video controls width="680" height="360"></video>
<video controls width="680" height="360"></video>
<canvas width="680" height="360"></canvas>
<script>
let mediaStream;
let videos;
let buffer;
let currentTest = 0;
function isPixelTransparent(pixel)
{
return pixel[0] === 0 && pixel[1] === 0 && pixel[2] === 0 && pixel[3] === 0;
}
function isPixelBlack(pixel)
{
return pixel[0] === 0 && pixel[1] === 0 && pixel[2] === 0 && pixel[3] === 255;
}
function isPixelGray(pixel)
{
return pixel[0] === 128 && pixel[1] === 128 && pixel[2] === 128 && pixel[3] === 255;
}
function verifyFramesBeingDisplayed()
{
videos[currentTest].removeEventListener('playing', verifyFramesBeingDisplayed, false)
canvas = document.querySelector('canvas');
context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);
let x = canvas.width * .035;
let y = canvas.height * 0.6 + 2 + x;
buffer = context.getImageData(x, y, 1, 1).data;
shouldBeTrue('isPixelTransparent(buffer)');
evalAndLog(`context.drawImage(videos[${currentTest}], 0, 0, ${canvas.width}, ${canvas.height})`);
buffer = context.getImageData(x, y, 1, 1).data;
shouldBeFalse('isPixelTransparent(buffer)');
shouldBeFalse('isPixelBlack(buffer)');
x = canvas.width * .05;
y = canvas.height * .05;
buffer = context.getImageData(x, y, 1, 1).data;
shouldBeFalse('isPixelTransparent(buffer)');
if (!currentTest)
shouldBeTrue('isPixelBlack(buffer)');
else
shouldBeTrue('isPixelGray(buffer)');
if (currentTest >= 1) {
finishJSTest();
return;
}
videos[currentTest].pause();
++currentTest;
requestNextStream();
}
function setupVideoElement(stream)
{
mediaStream = stream;
testPassed('mediaDevices.getUserMedia generated a stream successfully.');
evalAndLog(`videos[${currentTest}].srcObject = mediaStream`);
}
function canplay()
{
videos[currentTest].removeEventListener('canplay', canplay, false)
evalAndLog(`videos[${currentTest}].play()`);
}
function requestNextStream()
{
debug(`<br> === checking pixels from ${!currentTest ? "front" : "back"} camera ===`);
let constraints = {video : !currentTest ? true : {facingMode: "environment"}};
navigator.mediaDevices.getUserMedia(constraints).then(setupVideoElement);
}
function start()
{
description("Tests that the stream displays captured buffers to the video element.");
if (window.testRunner)
testRunner.setUserMediaPermission(true);
videos = Array.from(document.getElementsByTagName('video'));
videos.forEach((video) => {
video.addEventListener('canplay', canplay, false);
video.addEventListener('playing', verifyFramesBeingDisplayed, false);
});
requestNextStream();
}
window.jsTestIsAsync = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>