@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
55 lines (43 loc) • 1.59 kB
JavaScript
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]);
}
}