summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webcodecs/video-encoder-config.https.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webcodecs/video-encoder-config.https.any.js')
-rw-r--r--testing/web-platform/tests/webcodecs/video-encoder-config.https.any.js159
1 files changed, 159 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webcodecs/video-encoder-config.https.any.js b/testing/web-platform/tests/webcodecs/video-encoder-config.https.any.js
new file mode 100644
index 0000000000..fe0c59c002
--- /dev/null
+++ b/testing/web-platform/tests/webcodecs/video-encoder-config.https.any.js
@@ -0,0 +1,159 @@
+// 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));
+});
+
+