blob: 925e8374f58f4e1983d9ed7d05c0324a9028c22a [file] [log] [blame]
<!DOCTYPE html>
<html>
<title>Test the VideoTrackReader API.</title>
<body></body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/media.js"></script>
<script>
var testVideo = {
url: getVideoURI('/media/movie_5'),
height: 240,
width: 320,
}
async function getMediaStream() {
let video = document.createElement('video');
document.body.appendChild(video);
video.src = testVideo.url;
await video.play();
return video.captureStream();
}
promise_test(async function(t) {
let stream = await getMediaStream();
let vtr = new VideoTrackReader(stream.getVideoTracks()[0]);
}, 'Test we can construct a VideoTrackReader.');
promise_test(async function(t) {
let stream = await getMediaStream();
let vtr = new VideoTrackReader(stream.getVideoTracks()[0]);
let numberFrames = 0;
return new Promise(resolve => {
vtr.start(t.step_func(frame => {
assert_equals(frame.codedWidth, testVideo.width);
assert_equals(frame.codedHeight, testVideo.height);
assert_not_equals(frame.timestamp, null);
frame.close();
if (++numberFrames == 5) {
vtr.stop();
resolve();
}
}));
});
}, 'Test we can start and stop a VideoTrackReader.');
promise_test(async function(t) {
let stream = await getMediaStream();
let vtr = new VideoTrackReader(stream.getVideoTracks()[0]);
let stopped = false;
return new Promise(resolve => {
vtr.start(t.step_func(() => {
assert_false(stopped, "A stopped callback should never be called again");
vtr.stop();
vtr.start(resolve);
stopped = true;
}));
});
}, 'Test we can restart a stopped VideoTrackReader.');
promise_test(async function(t) {
let stream = await getMediaStream();
let track = stream.getVideoTracks()[0];
let vtr_a = new VideoTrackReader(track);
let vtr_b = new VideoTrackReader(track);
let receivedFrame_a = false;
let receivedFrame_b = false;
return Promise.all([
new Promise(resolve => { vtr_a.start(resolve); }),
new Promise(resolve => { vtr_b.start(resolve); }),
]);
}, 'Test we can create multiple VideoTrackReaders from the same track.');
promise_test(async function(t) {
let stream = await getMediaStream();
let audioTrack = stream.getAudioTracks()[0];
assert_throws_js(TypeError, () => {
let vtr = new VideoTrackReader(audioTrack);
})
}, 'Test creating a VideoTrackReaders from an audio track throws.');
promise_test(async function(t) {
let stream = await getMediaStream();
let vtr = new VideoTrackReader(stream.getVideoTracks()[0]);
assert_throws_dom("InvalidStateError", () => {
vtr.stop();
})
}, 'Test stopping a stopped VideoTrackReader throws.');
promise_test(async function(t) {
let stream = await getMediaStream();
let vtr = new VideoTrackReader(stream.getVideoTracks()[0]);
vtr.start(() => {});
assert_throws_dom("InvalidStateError", () => {
vtr.start(() => {});
})
}, 'Test starting a started VideoTrackReader throws.');
</script>
</html>