blob: 632f3fd5c75b4f8090c257e7f033233cb0e7dafa [file] [log] [blame]
<!DOCTYPE HTML>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
function createNewCanvas(width, height)
{
var canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, width, height);
return ctx;
}
function checkLowResult(imageBitmap, video, sx, sy, sw, sh)
{
var ctx1 = createNewCanvas(50, 50);
var ctx2 = createNewCanvas(50, 50);
ctx1.drawImage(imageBitmap, 0, 0);
ctx2.drawImage(video, sx, sy, sw, sh, 0, 0, 40, 30);
var data1 = ctx1.getImageData(0, 0, 50, 50).data;
var data2 = ctx2.getImageData(0, 0, 50, 50).data;
var dataMatched = true;
for (var i = 0; i < data1.length; i++) {
// data1[i] is strictly the same as data2[i] on software rendering.
// But on GPU, the difference could be quite significant.
if (Math.abs(data1[i] - data2[i]) > 18) {
dataMatched = false;
break;
}
}
assert_true(dataMatched);
}
function generateTest()
{
return Promise.all([
createImageBitmap(video, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "high"}),
createImageBitmap(video, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "medium"}),
createImageBitmap(video, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "low"}),
createImageBitmap(video, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "pixelated"}),
createImageBitmap(video, 50, 50, 160, 120, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "high"}),
createImageBitmap(video, 50, 50, 160, 120, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "medium"}),
createImageBitmap(video, 50, 50, 160, 120, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "low"}),
createImageBitmap(video, 50, 50, 160, 120, {resizeWidth: 40, resizeHeight: 30, resizeQuality: "pixelated"}),
]).then(t.step_func_done(([noCropHigh, noCropMedium, noCropLow, noCropPixelated, cropHigh, cropMedium, cropLow, cropPixelated]) => {
checkLowResult(noCropLow, video, 0, 0, video.videoWidth, video.videoHeight);
checkLowResult(cropLow, video, 50, 50, 160, 120);
}), t.step_func_done(function() {
assert_true(false, 'Promise rejected');
}));
}
var t = async_test('createImageBitmap(HTMLVideoElement) with resize option');
// HTMLVideoElement
var video = document.createElement("video");
video.oncanplaythrough = t.step_func(function() {
return generateTest();
});
video.src = "../../compositing/resources/video.ogv";
</script>