blob: c61d10665b41923a85c0f00b318843493c141b36 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<video id="video" autoplay width=480px height=480px controls ></video>
<canvas id="canvas" width=480px height=480px></canvas>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
const canvas = document.getElementById("canvas");
const video = document.getElementById("video");
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 logPixel(name, pixel)
{
console.log(`${name}: ${pixel[0]}, ${pixel[1]}, ${pixel[2]}, ${pixel[3]}`);
}
function checkCanvas(canvas, stream)
{
return new Promise((resolve, reject) => {
video.srcObject = stream;
video.onplay = () => {
const ctx = canvas.getContext("2d");
ctx.drawImage(video, 0 ,0);
try {
setTimeout(() => {
assert_true(isPixelBlack(ctx.getImageData(5, 5, 1, 1).data), "Pixel at 5x5 is NOT from camera.");
assert_true(isPixelGray(ctx.getImageData(50, 200, 1, 1).data), "Pixel at 50x200 is from camera.");
resolve();
}, 500);
} catch(err) {
reject(err);
return;
}
}
});
}
promise_test(async () => {
let stream = await navigator.mediaDevices.getUserMedia({ video: true });
stream = null;
const devices = await navigator.mediaDevices.enumerateDevices();
let cameraID = undefined;
devices.forEach(device => { if (device.label == "Mock video device 2") cameraID = device.deviceId; });
assert_true(cameraID !== undefined, "Found camera2");
stream = await navigator.mediaDevices.getUserMedia({ video: { deviceId: { exact: cameraID }, width: 480, height: 480 } });
return checkCanvas(canvas, stream);
}, "Video frames are resized in letterbox-mode when captured at non-native size.");
</script>
</head>
</html>