Bug 1361655 - Add new reftest to verify the first and last frame for short.mp4. r=jwwang

Since the ref-sample made by linux, the mac and windows platforms need fuzzy.
And on windows platform, the first frame is different to other platform, skip it first.
Android platform somehow can not load the video src.

MozReview-Commit-ID: A0VbEcNSmck

--HG--
extra : rebase_source : 266f0012d460b8fd6b62ac1d2878dc9aa686f9a8
This commit is contained in:
bechen 2017-05-17 16:54:16 +08:00
parent a12765de8f
commit 97ab63e82a
7 changed files with 154 additions and 0 deletions

View File

@ -0,0 +1,80 @@
<!DOCTYPE HTML>
<html>
<head>
<script type="application/javascript">
</script>
</head>
<body>
<video id="v1" style="position:absolute; left:0; top:0"></video>
<canvas id="canvas"></canvas>
<script type="application/javascript">
/* READ ME first.
The script is trying to make a reftest sample for reftest.
HOW TO USE:
1. Choose the first or last frame you want to generate. And set
window.onload function to dumpFirstFrameToConsole/dumpLastFrameToConsole.
2. Set the video.src in dumpFirstFrameToConsole/dumpLastFrameToConsole.
3. Run the script on browser.
4. Open console (ctrl+shift+k) to get the first/last frame.
5. Copy the url to your xxx-ref.html(short.mp4.firstframe-ref.html).
You might hit security error if the video.src cross origin.
Enable "media.seekToNextFrame.enabled" for the seekToNextFrame function
or using nightly, the seekToNextFrame() ensure the ended event fired.
*/
//window.onload = function() { setTimeout(dumpFirstFrameToConsole, 0); };
window.onload = function() { setTimeout(dumpLastFrameToConsole, 0); };
function drawVideoToConsole(v) {
var canvas = document.getElementById("canvas");
canvas.width = v.videoWidth;
canvas.height = v.videoHeight;
var ctx = canvas.getContext("2d");
ctx.drawImage(v, 0, 0, v.videoWidth, v.videoHeight);
var dataURL = canvas.toDataURL();
console.log(dataURL);
}
function dumpFirstFrameToConsole() {
var video = document.getElementById("v1");
video.src = "short.mp4";
video.preload = "metadata";
video.addEventListener("loadeddata", function() {
drawVideoToConsole(video);
});
}
function dumpLastFrameToConsole() {
var video = document.getElementById("v1");
video.src = "short.mp4";
video.preload = "metadata";
video.seenEnded = false;
// Seek to the end
video.addEventListener("loadeddata", function() {
video.currentTime = video.duration;
video.onseeked = () => {
video.onseeked = null;
callSeekToNextFrame();
};
});
function callSeekToNextFrame() {
video.seekToNextFrame().then(
() => {
if (!video.seenEnded)
callSeekToNextFrame();
},
() => {
// Reach the end, do nothing.
}
);
}
video.addEventListener("ended", function() {
video.seenEnded = true;
drawVideoToConsole(video);
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,2 @@
skip-if(Android) fuzzy-if(OSX,22,49977) skip-if(winWidget) HTTP(..) == short.mp4.firstframe.html short.mp4.firstframe-ref.html
skip-if(Android) fuzzy-if(OSX,23,51392) fuzzy-if(winWidget,59,76797) HTTP(..) == short.mp4.lastframe.html short.mp4.lastframe-ref.html

View File

@ -0,0 +1,4 @@
<!DOCTYPE HTML>
<img style="position:absolute; left:0; top:0"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAHv0lEQVR4nO3dQWyfdR3H8R8d7XBjMDYcYzqCQY0SkWhQAomJJ2/GgyeNiTExHk3URE9e1INGEz3NA5CYETwQFi8YEvAgGg6LogFDIojbEBTGpsyNrWNt9/HQso0Btus2vu2+r1/yypN/+/x/+fbyzpP/0z4dGSMAHY3qAQCqCCDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSCl/jNGsmFi/vUVk5mZHDk2Rl4ZI5kaOTo25MC4/NT5h8b894+PTTk+NpXPz+omgJSaGyOZGDm48PrfY2R6YmRmzMvk9cm67afOPzpGpsfIsbExx8bG8vlZ3QSQFeFPYyQ3fyzJwSRHkiQ5+lqS55P9u5P163P0De+ZWlA/O6uXALICrEk+cEvy9W8nOZTk1Zxe/5yP4JVX5vgb3jOVjCtWwOysZgJIqSNjazJ5c+75zleTnMib12tJppOJLTnziu/IGHl1BczP6iaAlNoz1iSbbl+48nvlLQJ4/IwATp56nwByIQggpXbc+enk4d+edcV3IslskrnTX558YwDhQhBAaj3yaPLyoTMCOLsQwDkB5KITQEo8dP2G5N4dycwZkft/a921mRlryufm0iKA1Lh3R7L/2aXFTwC5SASQd9TOmzYnD9y99PC9vq7aeNbvAcL5E0DeWQ/cnTz3hACyIgggF8XJhePcmMihMfLzz9yW/PHhcw+fAHIRCSAX3sTEqeOJMZKP3568/Nfk8D4BZEURQC6eDRvy+599N8nR5YfvVACvyrHqn4dLjgBycWzfnnz/B8nJg0mOCSArkgByQcyNtTk6Ru6/447krrvy+hNdTi5atpnMPwFmkbXh7IchwPkTQM7fmg2ZHVPJ+29LnnoqOXDgHC7tZhYIIO88AWRZXr/L++jnPpvHv/TF5F9/yann+C2y5k4eTQ6eTHb/Lfd97fPJkX1LCOC6+RsqcAEJIMv30VuTx36XHNif0w8xWOJ6+kD+8OVv5Cs3XZ0c3iOAlBBAluWRa65Knt+7pNYdS5LZhU8D9+1JfrUrGZuSqffmnmu3Jc/sE0BKCCDLci4BPHPNfuub+cV1W5KxKRkb5wP47D8EkBICyLLs2rIteekcbnbs+HVy5xfetM9Da7cmTzwngJQQQJZlyQGcnsnuH/4key+/KU+PG07vMTF/fGjt1uRJV4DUEECW5b5t25KDbxHAuePzHns8+d6PkhuvSybffp+dm69N/u4mCDUEkGV52wBOH85/d96TJ2+9PQ9es3XRfQSQSgLIsjy45erkxb2Z/yuOY8lju5Mf/zT54KeSsXn+H54vwc7Nm5I9S3gwqgByEQggy3IqgIefyZO7duTPn7wzj37oI5kdIxlXJxNrl7SPAFJJAFmWE2Mkt3w42bg+WbP8fQSQSgLIssyMkVxx+XnvI4BUEkBKLTmA69ct+XNFWCoBpNQvr3t3sm/v4gGcmhJALjgBpNT929+TvPjC4gFcAbNy6RFASu163w3J/hcFkBICSCkBpJIAUkoAqSSAlBJAKgkgpQSQSgJIKQGkkgBSSgCpJICUEkAqCSClBJBKAkgpAaSSAFJKAKkkgJQSQCoJIKUEkEoCSCkBpJIAUkoAqSSAlBJAKgkgpQSQSgJIKQGkkgBSSgCpJICUEkAqCSClBJBKAkgpAaSSAFJKAKkkgJQSQCoJIKUEkEoCSCkBpJIAUkoAqSSAlBJAKgkgpQSQSgJIKQGkkgBSSgCpJICUEkAqCSClBJBKAkgpAaSSAFJKAKkkgJQSQCoJIKUEkEoCSKkHbtyevPySAFJCACklgFQSQEr9ZvMnkj2L92924rLMXFY/L5cWAaTUI5tuS/YtUr+T0zk4RrJ2snxeLi0CyIpy8qzX02MqM2NdXn3TuVML6mdm9RJAVrQT412ZfsvQrV1QPyOrlwCyqswuqJ6DS4MAsqoIIBeSAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0JYAAm0JINCWAAJtCSDQlgACbQkg0Nb/AJRYBp4E6qsBAAAAAElFTkSuQmCC"
>

View File

@ -0,0 +1,19 @@
<!DOCTYPE HTML>
<html class="reftest-wait">
<head>
<script type="text/javascript">
function doTest() {
var video = document.getElementById("v1");
video.src = "../short.mp4";
video.preload = "metadata";
video.addEventListener("loadeddata", function() {
document.documentElement.removeAttribute('class');
});
}
window.addEventListener("MozReftestInvalidate", doTest);
</script>
</head>
<body>
<video id="v1" style="position:absolute; left:0; top:0"></video>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html class="reftest-wait">
<head>
<script type="text/javascript">
function doTest() {
var video = document.getElementById("v1");
video.src = "../short.mp4";
video.preload = "metadata";
video.seenEnded = false;
// Seek to the end
video.addEventListener("loadeddata", function() {
video.currentTime = video.duration;
video.onseeked = () => {
video.onseeked = null;
callSeekToNextFrame();
};
});
function callSeekToNextFrame() {
video.seekToNextFrame().then(
() => {
if (!video.seenEnded)
callSeekToNextFrame();
},
() => {
// Reach the end, do nothing.
}
);
}
video.addEventListener("ended", function() {
video.seenEnded = true;
document.documentElement.removeAttribute('class');
});
}
window.addEventListener("MozReftestInvalidate", doTest);
</script>
</head>
<body>
<video id="v1" style="position:absolute; left:0; top:0"></video>
</body>
</html>

View File

@ -429,3 +429,6 @@ include ../../dom/encoding/test/reftest/reftest.list
# APZ/async positioning tests
include ../../gfx/layers/apz/test/reftest/reftest.list
# Media
include ../../dom/media/test/reftest/reftest.list