AVIF in worker

This commit is contained in:
Jake Archibald
2020-09-16 11:48:13 +01:00
parent 2583d689b9
commit 7776134bc2
9 changed files with 171 additions and 42 deletions

View File

@@ -0,0 +1,24 @@
import avif_enc, { AVIFModule } from '../../../codecs/avif/enc/avif_enc';
import wasmUrl from '../../../codecs/avif/enc/avif_enc.wasm';
import { EncodeOptions } from './encoder-meta';
import { initEmscriptenModule } from '../util';
let emscriptenModule: Promise<AVIFModule>;
export async function encode(
data: ImageData,
options: EncodeOptions,
): Promise<ArrayBuffer> {
if (!emscriptenModule)
emscriptenModule = initEmscriptenModule(avif_enc, wasmUrl);
const module = await emscriptenModule;
const result = module.encode(data.data, data.width, data.height, options);
if (!result) {
throw new Error('Encoding error');
}
// wasm cant run on SharedArrayBuffers, so we hard-cast to ArrayBuffer.
return result.buffer as ArrayBuffer;
}