mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-14 17:49:52 +00:00
25 lines
766 B
TypeScript
25 lines
766 B
TypeScript
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 can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer.
|
||
return result.buffer as ArrayBuffer;
|
||
}
|