mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-14 17:49:52 +00:00
Typings for cwrap API
This commit is contained in:
@@ -4,9 +4,20 @@ import mozjpeg_enc from '../../../codecs/mozjpeg_enc/mozjpeg_enc';
|
|||||||
// Using require() so TypeScript doesn’t complain about this not being a module.
|
// Using require() so TypeScript doesn’t complain about this not being a module.
|
||||||
const wasmBinaryUrl = require('../../../codecs/mozjpeg_enc/mozjpeg_enc.wasm');
|
const wasmBinaryUrl = require('../../../codecs/mozjpeg_enc/mozjpeg_enc.wasm');
|
||||||
|
|
||||||
|
// API exposed by wasm module. Details in the codec’s README.
|
||||||
|
interface ModuleAPI {
|
||||||
|
version(): number;
|
||||||
|
create_buffer(width: number, height: number): number;
|
||||||
|
destroy_buffer(pointer: number): void;
|
||||||
|
encode(buffer: number, width: number, height: number, quality: number): void;
|
||||||
|
free_result(): void;
|
||||||
|
get_result_pointer(): number;
|
||||||
|
get_result_size(): number;
|
||||||
|
}
|
||||||
|
|
||||||
export class MozJpegEncoder implements Encoder {
|
export class MozJpegEncoder implements Encoder {
|
||||||
private emscriptenModule: Promise<EmscriptenWasm.Module>;
|
private emscriptenModule: Promise<EmscriptenWasm.Module>;
|
||||||
private api: any;
|
private api: Promise<ModuleAPI>;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.emscriptenModule = new Promise(resolve => {
|
this.emscriptenModule = new Promise(resolve => {
|
||||||
// TODO: See if I can just use m.then()?
|
// TODO: See if I can just use m.then()?
|
||||||
@@ -36,7 +47,7 @@ export class MozJpegEncoder implements Encoder {
|
|||||||
create_buffer: m.cwrap('create_buffer', 'number', ['number', 'number']),
|
create_buffer: m.cwrap('create_buffer', 'number', ['number', 'number']),
|
||||||
destroy_buffer: m.cwrap('destroy_buffer', '', ['number']),
|
destroy_buffer: m.cwrap('destroy_buffer', '', ['number']),
|
||||||
encode: m.cwrap('encode', '', ['number', 'number', 'number', 'number']),
|
encode: m.cwrap('encode', '', ['number', 'number', 'number', 'number']),
|
||||||
free_result: m.cwrap('free_result', '', ['number']),
|
free_result: m.cwrap('free_result', '', []),
|
||||||
get_result_pointer: m.cwrap('get_result_pointer', 'number', []),
|
get_result_pointer: m.cwrap('get_result_pointer', 'number', []),
|
||||||
get_result_size: m.cwrap('get_result_size', 'number', []),
|
get_result_size: m.cwrap('get_result_size', 'number', []),
|
||||||
};
|
};
|
||||||
@@ -54,7 +65,7 @@ export class MozJpegEncoder implements Encoder {
|
|||||||
const resultSize = api.get_result_size();
|
const resultSize = api.get_result_size();
|
||||||
const resultView = new Uint8Array(m.HEAP8.buffer, resultPointer, resultSize);
|
const resultView = new Uint8Array(m.HEAP8.buffer, resultPointer, resultSize);
|
||||||
const result = new Uint8Array(resultView);
|
const result = new Uint8Array(resultView);
|
||||||
api.free_result(resultPointer);
|
api.free_result();
|
||||||
api.destroy_buffer(p);
|
api.destroy_buffer(p);
|
||||||
|
|
||||||
return result.buffer;
|
return result.buffer;
|
||||||
|
|||||||
Reference in New Issue
Block a user