blob: 6a4aff8d8439118e46a6bb66ad9be333e6cf7d1d [file] [log] [blame]
<html>
<head>
<title>Drawing to canvas using video</title>
<script src=media-file.js></script>
<script>
var video;
var numberOfSeeks = 4;
var expectedResults = [
// [x, y, r, g, b]
[40, 165, 194, 193, 14], // yellow
[56, 165, 17, 197, 195], // blue/cyan
[73, 165, 20, 200, 18], // green
];
if (window.testRunner) {
testRunner.dumpAsText(true);
testRunner.waitUntilDone();
}
function checkColorAtLocation(ctx, x, y, r, g, b, tolerance)
{
var buffer = ctx.getImageData(x, y, 1, 1).data;
if (Math.abs(buffer[0] - r) < tolerance
&& Math.abs(buffer[1] - g) < tolerance
&& Math.abs(buffer[2] - b) < tolerance)
logResult(true, "Saw close enough to (" + r + ", " + g + ", " + b + ") at (" + x + ", " + y + ")");
else
logResult(false, "Expected (" + r + ", " + g + ", " + b + ") at (" + x + ", " + y + ") but saw (" + buffer[0] + ", " + buffer[1] + ", " + buffer[2] + ")");
}
function drawAndInsertFrame()
{
var canvas = document.createElement('canvas');
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
document.getElementById('canvases').appendChild(canvas);
// The test video has a number of colored squares.
// Check a few of them.
expectedResults.forEach(function (value) {
checkColorAtLocation(ctx, value[0], value[1], value[2], value[3], value[4], 3);
})
// Seek a few times. We exercise different code paths
// for the first few and then subsequent drawImage calls.
if (--numberOfSeeks) {
video.currentTime += 0.5;
return;
}
endTest();
}
function canplaythrough()
{
video.currentTime = 1;
}
function start()
{
findMediaElement();
waitForEvent('canplaythrough', canplaythrough);
waitForEvent('seeked', drawAndInsertFrame);
video.src = findMediaFile('video', 'content/test');
}
</script>
<script src=video-test.js></script>
</head>
<body onload="start()">
<video id="video"></video>
<div id="canvases"></div>
</body>
</html>