87 lines
3.2 KiB
HTML
87 lines
3.2 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Testing that VP8 videos are using limited video range</title>
|
|
<script src="../resources/testharness.js"></script>
|
|
<script src="../resources/testharnessreport.js"></script>
|
|
</head>
|
|
<body>
|
|
<div>Video should be running, a checker be drawn and colors matching the original.</div>
|
|
<canvas id="canvas1" width="320" height="320"></canvas>
|
|
<video id="video" autoplay playsInline width="320" height="320"></video>
|
|
<canvas id="canvas2" width="320" height="320"></canvas>
|
|
<script src ="routines.js"></script>
|
|
<script>
|
|
|
|
var ctx = canvas1.getContext("2d");
|
|
|
|
// draw black and white checker.
|
|
function drawChecker(ctx, x, y, width, height) {
|
|
for (var i = 0; i < x; i++) {
|
|
for (var j = 0; j < y; j++) {
|
|
if ((i + j) % 2 == 0)
|
|
ctx.fillStyle = "#000000";
|
|
else
|
|
ctx.fillStyle = "#FFFFFF";
|
|
ctx.fillRect(i * width / x, j * height / y, width / x, height / y);
|
|
}
|
|
}
|
|
}
|
|
|
|
function checkPixelData(pixelData, expected, fuzz) {
|
|
return Math.abs(pixelData[0] - expected[0]) <= fuzz
|
|
&& Math.abs(pixelData[1] - expected[1]) <= fuzz
|
|
&& Math.abs(pixelData[2] - expected[2]) <= fuzz;
|
|
}
|
|
|
|
const FPS = 30;
|
|
var track;
|
|
var remoteTrack;
|
|
var receivingConnection;
|
|
var localStream;
|
|
|
|
// TODO. Bug 224960: Investigate why we need to redraw the canvas for the play promise to later be resolved.
|
|
// Repeatedly redraw the checker to get the video stream going.
|
|
setInterval(() => drawChecker(ctx, 2, 2, canvas1.width, canvas1.height), 1000 / FPS);
|
|
|
|
promise_test(async (test) => {
|
|
const remoteStream = await new Promise((resolve, reject) => {
|
|
localStream = canvas1.captureStream(FPS);
|
|
track = localStream.getVideoTracks()[0];
|
|
|
|
createConnections((firstConnection) => {
|
|
firstConnection.addTrack(track, localStream);
|
|
firstConnection.getTransceivers()[0].setCodecPreferences([{mimeType: "video/VP8", clockRate: 90000}]);
|
|
}, (secondConnection) => {
|
|
receivingConnection = secondConnection;
|
|
secondConnection.ontrack = (trackEvent) => {
|
|
remoteTrack = trackEvent.track;
|
|
resolve(trackEvent.streams[0]);
|
|
};
|
|
}, { observeOffer : test.step_func((offer) => {
|
|
assert_false(offer.sdp.includes("H264"), "No H264");
|
|
assert_true(offer.sdp.includes("VP8"), "VP8");
|
|
return offer;
|
|
})
|
|
});
|
|
setTimeout(() => reject("Test timed out"), 5000);
|
|
});
|
|
video.srcObject = remoteStream;
|
|
return video.play();
|
|
}, "Setting video exchange");
|
|
|
|
promise_test(async (test) => {
|
|
await checkVideoBlack(false, canvas2, video);
|
|
let context = canvas2.getContext('2d');
|
|
// Check pixel is pure black in top left square.
|
|
let pixelData = context.getImageData(canvas2.width / 4, canvas2.height / 4, 1, 1).data;
|
|
assert_true(checkPixelData(pixelData, [0, 0, 0], 1));
|
|
// Check pixel is pure white in top right square.
|
|
pixelData = context.getImageData(3 * canvas2.width / 4, canvas2.height / 4, 1, 1).data;
|
|
assert_true(checkPixelData(pixelData, [255, 255, 255], 1));
|
|
}, "Track is enabled, video should not be black");
|
|
</script>
|
|
</body>
|
|
</html>
|