blob: 550ddd0a974791891b26a597d8b41da790a426d4 [file] [log] [blame]
<!DOCTYPE html>
<title>Test "video" as a source for "canvas".</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<video></video>
<canvas width="160" height="120"></canvas>
<script>
async_test(function(t) {
var ctx;
var width;
var height;
var results = {
current: 0,
values: [
// Different platforms may take different RGB conversion paths or
// have slight rounding differences, so allow multiple values here.
{ time: 0, r: [255], g: [255], b: [0] },
{ time: 2, r: [0], g: [3], b: [240, 243] },
{ time: 4, r: [0], g: [31], b: [213, 216] },
{ time: 6, r: [0], g: [48], b: [182, 185] },
{ time: 8, r: [0], g: [75, 76], b: [153, 155] },
{ time: 10, r: [0], g: [96, 97], b: [126, 128] }
]
};
var video = document.querySelector("video");
video.onloadedmetadata = t.step_func(function() {
width = video.videoWidth / 2;
height = video.videoHeight / 2;
ctx = document.querySelector("canvas").getContext("2d");
ctx.fillStyle = "yellow";
ctx.fillRect(0, 0, width, height);
testFrame();
});
video.onseeked = t.step_func(function() {
ctx.drawImage(video, 0, 0, width, height);
testFrame();
});
function testFrame() {
var expected = results.values[results.current];
var frame = ctx.getImageData(0, 0, width, height);
var r = frame.data[4 * 2 * width + 16 + 0];
var g = frame.data[4 * 2 * width + 16 + 1];
var b = frame.data[4 * 2 * width + 16 + 2];
assert_true(expected.r.includes(r));
assert_true(expected.g.includes(g));
assert_true(expected.b.includes(b));
if (++results.current == results.values.length)
t.done();
else
video.currentTime = results.values[results.current].time;
}
video.src = "content/counting.webm";
});
</script>