mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 20:35:50 +00:00
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:
parent
a12765de8f
commit
97ab63e82a
80
dom/media/test/reftest/generateREF.html
Normal file
80
dom/media/test/reftest/generateREF.html
Normal 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>
|
2
dom/media/test/reftest/reftest.list
Normal file
2
dom/media/test/reftest/reftest.list
Normal 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
|
4
dom/media/test/reftest/short.mp4.firstframe-ref.html
Normal file
4
dom/media/test/reftest/short.mp4.firstframe-ref.html
Normal 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"
|
||||
>
|
19
dom/media/test/reftest/short.mp4.firstframe.html
Normal file
19
dom/media/test/reftest/short.mp4.firstframe.html
Normal 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>
|
4
dom/media/test/reftest/short.mp4.lastframe-ref.html
Normal file
4
dom/media/test/reftest/short.mp4.lastframe-ref.html
Normal file
File diff suppressed because one or more lines are too long
42
dom/media/test/reftest/short.mp4.lastframe.html
Normal file
42
dom/media/test/reftest/short.mp4.lastframe.html
Normal 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>
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user