Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,dedicatedworker
'use strict';
const kTypes = ['file', 'media-source'];
function configWith(type, contentType) {
return {
type,
video: {
contentType,
width: 800,
height: 600,
bitrate: 3000,
framerate: 24,
},
};
}
async function assertSameCapabilities(type, profileless, withProfile) {
const a =
await navigator.mediaCapabilities.decodingInfo(configWith(type, profileless));
const b =
await navigator.mediaCapabilities.decodingInfo(configWith(type, withProfile));
assert_true(a.supported, `${profileless} is supported`);
assert_equals(a.supported, b.supported, 'supported');
assert_equals(a.smooth, b.smooth, 'smooth');
assert_equals(a.powerEfficient, b.powerEfficient, 'powerEfficient');
assert_equals(a.keySystemAccess, b.keySystemAccess, 'keySystemAccess');
}
const kEquivalentCodecs = [
{name: 'vp8', bare: 'video/webm; codecs="vp8"',
qualified: 'video/webm; codecs="vp08.00.41.08"'},
{name: 'vp9', bare: 'video/webm; codecs="vp9"',
qualified: 'video/webm; codecs="vp09.00.10.08"'},
{name: 'av1', bare: 'video/mp4; codecs="av1"',
qualified: 'video/mp4; codecs="av01.0.04M.08"'},
{name: 'avc1', bare: 'video/mp4; codecs="avc1"',
qualified: 'video/mp4; codecs="avc1.42E01E"'},
];
for (const type of kTypes) {
for (const {name, bare, qualified} of kEquivalentCodecs) {
promise_test(
() => assertSameCapabilities(type, bare, qualified),
`${type}: profile-less '${name}' matches its qualified form`);
}
}
for (const type of kTypes) {
promise_test(async () => {
const {supported} = await navigator.mediaCapabilities.decodingInfo(
configWith(type, 'video/mp4; codecs="hev1"'));
assert_false(supported);
}, `${type}: profile-less 'hev1' is unsupported`);
}