Typings for cwrap API

This commit is contained in:
Surma
2018-05-17 22:31:20 +01:00
parent 49db0de05f
commit 7a5c8f5d6b

View File

@@ -4,9 +4,20 @@ import mozjpeg_enc from '../../../codecs/mozjpeg_enc/mozjpeg_enc';
// Using require() so TypeScript doesnt complain about this not being a module. // Using require() so TypeScript doesnt 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 codecs 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;