summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webcodecs/video-encoder-flush.https.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webcodecs/video-encoder-flush.https.any.js')
-rw-r--r--testing/web-platform/tests/webcodecs/video-encoder-flush.https.any.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webcodecs/video-encoder-flush.https.any.js b/testing/web-platform/tests/webcodecs/video-encoder-flush.https.any.js
new file mode 100644
index 0000000000..8f1724bc85
--- /dev/null
+++ b/testing/web-platform/tests/webcodecs/video-encoder-flush.https.any.js
@@ -0,0 +1,47 @@
+// META: global=window,dedicatedworker
+// META: script=/common/media.js
+// META: script=/webcodecs/utils.js
+// META: script=/webcodecs/video-encoder-utils.js
+
+promise_test(async t => {
+ let codecInit = getDefaultCodecInit(t);
+ let encoderConfig = {
+ codec: 'vp8',
+ width: 640,
+ height: 480,
+ displayWidth: 800,
+ displayHeight: 600,
+ };
+
+ let outputs = 0;
+ let firstOutput = new Promise(resolve => {
+ codecInit.output = (chunk, metadata) => {
+ outputs++;
+ assert_equals(outputs, 1, 'outputs');
+ encoder.reset();
+ resolve();
+ };
+ });
+
+ let encoder = new VideoEncoder(codecInit);
+ encoder.configure(encoderConfig);
+
+ let frame1 = createFrame(640, 480, 0);
+ let frame2 = createFrame(640, 480, 33333);
+ t.add_cleanup(() => {
+ frame1.close();
+ frame2.close();
+ });
+
+ encoder.encode(frame1);
+ encoder.encode(frame2);
+ const flushDone = encoder.flush();
+
+ // Wait for the first output, then reset.
+ await firstOutput;
+
+ // Flush should have been synchronously rejected.
+ await promise_rejects_dom(t, 'AbortError', flushDone);
+
+ assert_equals(outputs, 1, 'outputs');
+}, 'Test reset during flush');