Files
sendou.ink/app/features/scanner/worker/readback.worker.ts
2026-09-27 09:59:53 +03:00

27 lines
695 B
TypeScript

/**
* FrameReadbackWorker: reads VideoFrames back to RGBA for an analyzer worker
* (readback.ts), so the canvas readback's wait overlaps the analyzer's
* detector pass instead of blocking it.
*/
import {
createCanvasReadback,
type ReadbackRequest,
type ReadbackResponse,
} from "./readback";
const readFrame = createCanvasReadback();
self.onmessage = (e: MessageEvent<ReadbackRequest>) => {
const { id, frame } = e.data;
let response: ReadbackResponse;
try {
response = { id, ...readFrame(frame) };
} catch (error) {
frame.close();
response = { id, error: String(error) };
}
self.postMessage(response, {
transfer: "data" in response ? [response.data.buffer] : [],
});
};