diff options
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.js | 47 |
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'); |