forked from mirrors/gecko-dev
Automatic update from web-platform-tests webcodecs: Allow avc, hevc fields in VideoEncoder config for other codecs Browsers that don't support HEVC and AVC would just ignore these fields when configured for other codec formats. Chromium should do the same for consistency. Bug: 1375781 Change-Id: Iad6e3d54a904a949a29f5f9aa7871ea5d07893bd Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3984244 Reviewed-by: Dale Curtis <dalecurtis@chromium.org> Commit-Queue: Eugene Zemtsov <eugene@chromium.org> Cr-Commit-Position: refs/heads/main@{#1064447} -- wpt-commits: bc4e43a9bc8bdd769745bf9bf2c3fcd89ff954c4 wpt-pr: 36680
159 lines
3.9 KiB
JavaScript
159 lines
3.9 KiB
JavaScript
// META: global=window,dedicatedworker
|
|
// META: script=/webcodecs/utils.js
|
|
|
|
const invalidConfigs = [
|
|
{
|
|
comment: 'Emtpy codec',
|
|
config: {
|
|
codec: '',
|
|
width: 640,
|
|
height: 480,
|
|
},
|
|
},
|
|
{
|
|
comment: 'Unrecognized codec',
|
|
config: {
|
|
codec: 'bogus',
|
|
width: 640,
|
|
height: 480,
|
|
},
|
|
},
|
|
{
|
|
comment: 'Width is too large',
|
|
config: {
|
|
codec: 'vp8',
|
|
width: 1000000,
|
|
height: 480,
|
|
},
|
|
},
|
|
{
|
|
comment: 'Height is too large',
|
|
config: {
|
|
codec: 'vp8',
|
|
width: 640,
|
|
height: 1000000,
|
|
},
|
|
},
|
|
{
|
|
comment: 'Invalid scalability mode',
|
|
config: {codec: 'vp8', width: 640, height: 480, scalabilityMode: 'ABC'}
|
|
}
|
|
];
|
|
|
|
invalidConfigs.forEach(entry => {
|
|
promise_test(t => {
|
|
return promise_rejects_js(t, TypeError, VideoEncoder.isConfigSupported(entry.config));
|
|
}, 'Test that VideoEncoder.isConfigSupported() rejects invalid config:' + entry.comment);
|
|
});
|
|
|
|
|
|
const validButUnsupportedConfigs = [
|
|
{
|
|
comment: 'Too strenuous accelerated encoding parameters',
|
|
config: {
|
|
codec: "vp8",
|
|
hardwareAcceleration: "prefer-hardware",
|
|
width: 7000,
|
|
height: 7000,
|
|
bitrate: 1,
|
|
framerate: 240,
|
|
}
|
|
},
|
|
{
|
|
comment: 'Odd sized frames for H264',
|
|
config: {
|
|
codec: "avc1.42001E",
|
|
width: 641,
|
|
height: 480,
|
|
bitrate: 1000000,
|
|
framerate: 24,
|
|
}
|
|
},
|
|
];
|
|
|
|
validButUnsupportedConfigs.forEach(entry => {
|
|
let config = entry.config;
|
|
promise_test(async t => {
|
|
let support = await VideoEncoder.isConfigSupported(config);
|
|
assert_false(support.supported);
|
|
|
|
let new_config = support.config;
|
|
assert_equals(new_config.codec, config.codec);
|
|
assert_equals(new_config.width, config.width);
|
|
assert_equals(new_config.height, config.height);
|
|
if (config.bitrate)
|
|
assert_equals(new_config.bitrate, config.bitrate);
|
|
if (config.framerate)
|
|
assert_equals(new_config.framerate, config.framerate);
|
|
}, "VideoEncoder.isConfigSupported() doesn't support config:" + entry.comment);
|
|
});
|
|
|
|
const validConfigs = [
|
|
{
|
|
codec: 'avc1.42001E',
|
|
hardwareAcceleration: 'no-preference',
|
|
width: 640,
|
|
height: 480,
|
|
bitrate: 5000000,
|
|
framerate: 24,
|
|
avc: {format: 'annexb'},
|
|
futureConfigFeature: 'foo',
|
|
},
|
|
{
|
|
codec: 'vp8',
|
|
hardwareAcceleration: 'no-preference',
|
|
width: 800,
|
|
height: 600,
|
|
bitrate: 7000000,
|
|
bitrateMode: 'variable',
|
|
framerate: 60,
|
|
scalabilityMode: 'L1T2',
|
|
futureConfigFeature: 'foo',
|
|
latencyMode: 'quality',
|
|
avc: {format: 'annexb'}
|
|
},
|
|
{
|
|
codec: 'vp09.00.10.08',
|
|
hardwareAcceleration: 'no-preference',
|
|
width: 1280,
|
|
height: 720,
|
|
bitrate: 7000000,
|
|
bitrateMode: 'constant',
|
|
framerate: 25,
|
|
futureConfigFeature: 'foo',
|
|
latencyMode: 'realtime',
|
|
alpha: 'discard'
|
|
}
|
|
];
|
|
|
|
validConfigs.forEach(config => {
|
|
promise_test(async t => {
|
|
let support = await VideoEncoder.isConfigSupported(config);
|
|
assert_implements_optional(support.supported);
|
|
|
|
let new_config = support.config;
|
|
assert_false(new_config.hasOwnProperty('futureConfigFeature'));
|
|
assert_equals(new_config.codec, config.codec);
|
|
assert_equals(new_config.width, config.width);
|
|
assert_equals(new_config.height, config.height);
|
|
if (config.bitrate)
|
|
assert_equals(new_config.bitrate, config.bitrate);
|
|
if (config.framerate)
|
|
assert_equals(new_config.framerate, config.framerate);
|
|
if (config.bitrateMode)
|
|
assert_equals(new_config.bitrateMode, config.bitrateMode);
|
|
if (config.latencyMode)
|
|
assert_equals(new_config.latencyMode, config.latencyMode);
|
|
if (config.alpha)
|
|
assert_equals(new_config.alpha, config.alpha);
|
|
if (config.codec.startsWith('avc')) {
|
|
if (config.avc) {
|
|
assert_equals(new_config.avc.format, config.avc.format);
|
|
}
|
|
} else {
|
|
assert_equals(new_config.avc, undefined);
|
|
}
|
|
}, "VideoEncoder.isConfigSupported() supports:" + JSON.stringify(config));
|
|
});
|
|
|
|
|