UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

55 lines (43 loc) 1.59 kB
import { assert } from "../../../../../core/assert.js"; import { OnDemandWorkerManager } from "../../../../../core/process/worker/OnDemandWorkerManager.js"; import WorkerBuilder from "../../../../../core/process/worker/WorkerBuilder.js"; import { PNG_HEADER_BYTES } from "../png/PNG_HEADER_BYTES.js"; import { Codec } from "./Codec.js"; export class ThreadedImageDecoder extends Codec { /** * * @param {string} [worker_path] */ constructor({ worker_path = 'bundle-worker-image-decoder.js' } = {}) { super(); const workerBuilder = new WorkerBuilder(); workerBuilder.importScript(worker_path); workerBuilder.addMethod('decode', function (data, type) { return Lib.decode(data, type); }); /** * * @type {OnDemandWorkerManager} */ this.worker = new OnDemandWorkerManager(workerBuilder.build()); // shut down worker if it's not used for a while this.worker.setTimeout(1200); } async test(data) { assert.defined(data, 'data'); assert.notNull(data, 'data'); assert.isInstanceOf(data, Uint8Array, 'data', 'Uint8Array'); for (let i = 0; i < PNG_HEADER_BYTES.length; i++) { if (data[i] !== PNG_HEADER_BYTES[i]) { // only supports PNG return false; } } return true; } decode(data) { return this.worker.request('decode', [data.buffer]); } }