diff options
Diffstat (limited to 'dom/media/test/reftest/generateREF.html')
-rw-r--r-- | dom/media/test/reftest/generateREF.html | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/dom/media/test/reftest/generateREF.html b/dom/media/test/reftest/generateREF.html new file mode 100644 index 0000000000..7249ef2579 --- /dev/null +++ b/dom/media/test/reftest/generateREF.html @@ -0,0 +1,99 @@ +<!DOCTYPE HTML> +<html> +<head> +<script type="application/javascript"> +</script> +</head> +<body> +<p id="out"></p> +<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 dumpFirstFrame/dumpLastFrame. +2. Set the video.src in dumpFirstFrame/dumpLastFrame. +3. Run the script on browser. +4. Copy the base64 image 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(dumpFirstFrame, 0); }; +//window.onload = function() { setTimeout(dumpLastFrame, 0); }; +window.onload = function() { setTimeout(function(){dumpNthFrame(15);}, 0); }; + +function drawVideoToInnerHTML(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(); + document.getElementById("out").innerHTML=dataURL; +} + +function dumpFirstFrame() { + var video = document.getElementById("v1"); + video.src = "short.mp4"; + video.preload = "metadata"; + video.addEventListener("loadeddata", function() { + drawVideoToInnerHTML(video); + }); +} + +function dumpNthFrame(n) { + var video = document.getElementById("v1"); + video.src = "street.mp4"; + video.preload = "metadata"; + + function checkNthFrame() { + console.log((15-n+1)+"th Frame time is " + video.currentTime); + n--; + if (n == 0) { + drawVideoToInnerHTML(video); + } else { + video.seekToNextFrame(); + } + } + video.addEventListener("loadeddata", checkNthFrame); + video.addEventListener("seeked", checkNthFrame); +} + +function dumpLastFrame() { + 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; + drawVideoToInnerHTML(video); + }); +} +</script> +</body> +</html> |