mirror of
https://github.com/servo/servo
synced 2026-05-11 17:37:21 +02:00
113 lines
3.0 KiB
HTML
113 lines
3.0 KiB
HTML
<!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.destroy();
|
|
|
|
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>
|