| // 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'); |