1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/media/test/test_fastSeek.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,88 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=778077 1.8 +--> 1.9 +<head> 1.10 + <meta charset="utf-8"> 1.11 + <title>Test for Bug 778077</title> 1.12 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.14 + <script type="text/javascript" src="manifest.js"></script> 1.15 +</head> 1.16 +<body> 1.17 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=778077">Mozilla Bug 778077</a> 1.18 +<p id="display"></p> 1.19 +<div id="content" style="display: none"> 1.20 + 1.21 +</div> 1.22 +<pre id="test"> 1.23 +</pre> 1.24 + <script type="application/javascript"> 1.25 + 1.26 + /** Test for Bug 778077 - HTMLMediaElement.fastSeek() **/ 1.27 + // Iterate through a list of keyframe timestamps, and seek to 1.28 + // halfway between the keyframe and the keyframe after it. 1.29 + var manager = new MediaTestManager; 1.30 + 1.31 + function doSeek(v) { 1.32 + // fastSeek to half way between this keyframe and the next, or if this is the last 1.33 + // keyframe seek to halfway between this keyframe and the end of media. 1.34 + var nextKeyFrame = (v.keyframeIndex + 1) < v.keyframes.length ? v.keyframes[v.keyframeIndex + 1] : v.duration; 1.35 + v.target = (v.keyframes[v.keyframeIndex] + nextKeyFrame) / 2; 1.36 + v.fastSeek(v.target); 1.37 + ok(Math.abs(v.currentTime - v.target) < 0.01, 1.38 + v.name + " seekTo=" + v.target + " currentTime (" + v.currentTime + ") should be close to seek target initially"); 1.39 + } 1.40 + 1.41 + function onloadedmetadata(event) { 1.42 + var v = event.target; 1.43 + doSeek(v); 1.44 + } 1.45 + 1.46 + function onseeked(event) { 1.47 + var v = event.target; 1.48 + var keyframe = v.keyframes[v.keyframeIndex]; 1.49 + 1.50 + // Check that the current time ended up roughly after the keyframe. 1.51 + // We must be a bit fuzzy here, as the decoder backend may actually 1.52 + // seek to the audio sample prior to the keyframe. 1.53 + ok(v.currentTime >= keyframe - 0.05, 1.54 + v.name + " seekTo=" + v.target + " currentTime (" + v.currentTime + 1.55 + ") should be end up roughly after keyframe (" + keyframe + ") after fastSeek"); 1.56 + 1.57 + ok(v.currentTime <= v.target, 1.58 + v.name + " seekTo=" + v.target + " currentTime (" + v.currentTime + 1.59 + ") should be end up less than target after fastSeek"); 1.60 + 1.61 + v.keyframeIndex++ 1.62 + if (v.keyframeIndex == v.keyframes.length) { 1.63 + v.src = ""; 1.64 + v.parentNode.removeChild(v); 1.65 + manager.finished(v.token); 1.66 + } else { 1.67 + doSeek(v); 1.68 + } 1.69 + } 1.70 + 1.71 + function startTest(test, token) { 1.72 + manager.started(token); 1.73 + v = document.createElement("video"); 1.74 + v.src = test.name; 1.75 + v.name = test.name; 1.76 + v.preload = "metadata"; 1.77 + v.token = token; 1.78 + v.target = 0; 1.79 + v.keyframes = test.keyframes; 1.80 + v.keyframeIndex = 0; 1.81 + ok(v.keyframes.length > 0, v.name + " - video should have at least one sync point"); 1.82 + v.addEventListener("loadedmetadata", onloadedmetadata); 1.83 + v.addEventListener("seeked", onseeked); 1.84 + document.body.appendChild(v); 1.85 + } 1.86 + 1.87 + manager.runTests(gFastSeekTests, startTest); 1.88 + 1.89 + </script> 1.90 +</body> 1.91 +</html>