blob: adcf8941c3d2e7b5631a8116f2c6e24566434a59 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src=../media-file.js></script>
<script src=../video-test.js></script>
<script>
var addtrackEventCount = 0;
var seekedCount = 0;
var cuesStarts = [];
function trackAdded(event)
{
consoleWrite("EVENT(" + event.type + ")");
compareTracks("event.track", "video.textTracks[" + addtrackEventCount + "]");
++addtrackEventCount;
consoleWrite("");
}
function compareTracks(track1, track2)
{
var equal = (eval(track1) == eval(track2));
reportExpected(equal, track1, "==", track2, track1);
}
function pollProgress()
{
switch (seekedCount) {
case 1:
video.currentTime = 0;
run("video.play()");
consoleWrite("");
break;
case 2:
if (video.currentTime < 2 || inbandTrack1.cues.length <= 5)
return;
// Collect the start times of all cues, seek back to the beginning and play
// the same segment of the video file.
run("video.pause()");
for (var i = 0; i < inbandTrack1.cues.length; ++i)
cuesStarts.push(inbandTrack1.cues[i].startTime);
video.currentTime = 0;
run("video.play()");
consoleWrite("");
break;
case 3:
if (inbandTrack1.cues.length < cuesStarts.length)
break;
run("video.pause()");
var failure = false;
for (var i = 0; i < cuesStarts.length; ++i) {
if (cuesStarts[i] != inbandTrack1.cues[i].startTime) {
failure = true;
break;
}
}
if (failure) {
consoleWrite("<br><i>** FAIL<" + "/i>");
for (var i = 0; i < cuesStarts.length; ++i) {
var oldStart = cuesStarts[i];
var newStart = inbandTrack1.cues[i].startTime;
consoleWrite("Cue " + i + " start time was: " + oldStart + ", is now: " + newStart);
}
consoleWrite("");
}
endTest();
break;
}
}
function tracksChanged()
{
setInterval(pollProgress, 100);
// We seek to time 0.1 and then back to 0 before starting playback to make it more likely
// that the media engine will process the initial media samples and deliver the first
// inband cues to WebKit.
video.currentTime = 0.1;
}
function canplaythrough()
{
video.textTracks.removeEventListener("addtrack", trackAdded, false);
consoleWrite("<br><i>** Check initial in-band track states<" + "/i>");
testExpected("video.textTracks.length", 1);
run("inbandTrack1 = video.textTracks[0]");
testExpected("inbandTrack1.mode", "disabled");
testExpected("inbandTrack1.cues", null);
testExpected("inbandTrack1.language", "en");
testExpected("inbandTrack1.kind", "captions");
waitForEventOn(video.textTracks, 'change', tracksChanged);
consoleWrite("");
video.addEventListener("seeked", function() { ++seekedCount; });
run("inbandTrack1.mode = 'showing'");
}
function setup()
{
findMediaElement();
video.textTracks.addEventListener("addtrack", trackAdded);
video.src = '../content/counting-captioned.mov';
waitForEvent('canplaythrough', canplaythrough);
}
</script>
</head>
<body onload="setup()">
<video controls></video>
<p>In-band text tracks.</p>
</body>
</html>