@omnimedia/omnitool
Version:
open source video processing tools
39 lines • 1.35 kB
JavaScript
import { defer, once } from "@e280/stz";
import { Comrade } from "@e280/comrade";
import { loadPipe } from "../parts/load-pipe.js";
import { exposeErrors } from "../parts/expose-errors.js";
const deferred = defer();
const makePrepare = (host) => once(async (spec) => {
deferred.resolve({
spec,
pipe: await loadPipe({
spec,
task: "background-removal",
onLoading: loading => host.loading(loading),
})
});
});
const canvas = new OffscreenCanvas(1920, 1080);
const ctx = canvas.getContext("2d");
await Comrade.worker(shell => {
const prepare = makePrepare(shell.host);
return {
prepare: exposeErrors(prepare),
remove: exposeErrors(async (request) => {
const { pipe } = await deferred.promise;
canvas.width = request.displayWidth;
canvas.height = request.displayHeight;
ctx?.drawImage(request, 0, 0);
const output = await pipe(canvas);
const mask = output[0];
const frame = new VideoFrame(mask.toCanvas(), {
timestamp: request.timestamp,
duration: request.duration ?? undefined,
});
request.close();
shell.transfer = [frame];
return frame;
})
};
});
//# sourceMappingURL=worker.bundle.js.map