<!DOCTYPE html>
<!--
Terminate a worker while it's doing readback and video encoding
-->
<title>Frame readback in a worker</title>
<script src="webcodecs_common.js"></script>
<script type="text/javascript">
'use strict';
function makeWorker() {
const worker = new Worker('terminate-worker-worker.js');
let resolve_promise = null;
worker.onmessage = function(e) { resolve_promise(e.data); }
let worker_promise = new Promise((resolve) => {
resolve_promise = resolve;
});
return { worker, worker_promise };
}
async function main(arg) {
let source_type = arg.source_type;
TEST.log('Starting test with arguments: ' + JSON.stringify(arg));
let source = await createFrameSource(source_type, 320, 240);
if (!source) {
TEST.skip('Unsupported source: ' + source_type);
return;
}
let frame = await source.getNextFrame();
let {worker, worker_promise} = makeWorker();
worker.postMessage(frame, [frame]);
await worker_promise;
worker.terminate();
frame.close();
source.close();
TEST.log('Worker termination initiated');
}
addManualTestButton([{'source_type': 'offscreen'}]);
</script>