content/media/test/test_fastSeek.html

changeset 0
6474c204b198
     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>

mercurial