
* Scaling works on native * It works in wasm * Integrate with UI * Remove benchmark * Integrate Hqx into Resizer module * Link against repo for hqx * Remove unused defaultOpts * Re-add test file * Adding size dropdown * Chrome: go and sit on the naughty step * Better docs * Review * Add link to crbug * Update src/codecs/processor-worker/index.ts Co-Authored-By: Jake Archibald <jaffathecake@gmail.com> * Terminate worker inbetween resize jobs
98 lines
3.2 KiB
JavaScript
98 lines
3.2 KiB
JavaScript
(function() {
|
|
const __exports = {};
|
|
let wasm;
|
|
|
|
let cachegetUint32Memory = null;
|
|
function getUint32Memory() {
|
|
if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) {
|
|
cachegetUint32Memory = new Uint32Array(wasm.memory.buffer);
|
|
}
|
|
return cachegetUint32Memory;
|
|
}
|
|
|
|
let WASM_VECTOR_LEN = 0;
|
|
|
|
function passArray32ToWasm(arg) {
|
|
const ptr = wasm.__wbindgen_malloc(arg.length * 4);
|
|
getUint32Memory().set(arg, ptr / 4);
|
|
WASM_VECTOR_LEN = arg.length;
|
|
return ptr;
|
|
}
|
|
|
|
function getArrayU32FromWasm(ptr, len) {
|
|
return getUint32Memory().subarray(ptr / 4, ptr / 4 + len);
|
|
}
|
|
|
|
let cachedGlobalArgumentPtr = null;
|
|
function globalArgumentPtr() {
|
|
if (cachedGlobalArgumentPtr === null) {
|
|
cachedGlobalArgumentPtr = wasm.__wbindgen_global_argument_ptr();
|
|
}
|
|
return cachedGlobalArgumentPtr;
|
|
}
|
|
/**
|
|
* @param {Uint32Array} input_image
|
|
* @param {number} input_width
|
|
* @param {number} input_height
|
|
* @param {number} factor
|
|
* @returns {Uint32Array}
|
|
*/
|
|
__exports.resize = function(input_image, input_width, input_height, factor) {
|
|
const ptr0 = passArray32ToWasm(input_image);
|
|
const len0 = WASM_VECTOR_LEN;
|
|
const retptr = globalArgumentPtr();
|
|
wasm.resize(retptr, ptr0, len0, input_width, input_height, factor);
|
|
const mem = getUint32Memory();
|
|
const rustptr = mem[retptr / 4];
|
|
const rustlen = mem[retptr / 4 + 1];
|
|
|
|
const realRet = getArrayU32FromWasm(rustptr, rustlen).slice();
|
|
wasm.__wbindgen_free(rustptr, rustlen * 4);
|
|
return realRet;
|
|
|
|
};
|
|
|
|
function init(module) {
|
|
|
|
let result;
|
|
const imports = {};
|
|
|
|
if (module instanceof URL || typeof module === 'string' || module instanceof Request) {
|
|
|
|
const response = fetch(module);
|
|
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
|
result = WebAssembly.instantiateStreaming(response, imports)
|
|
.catch(e => {
|
|
console.warn("`WebAssembly.instantiateStreaming` failed. Assuming this is because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
|
return response
|
|
.then(r => r.arrayBuffer())
|
|
.then(bytes => WebAssembly.instantiate(bytes, imports));
|
|
});
|
|
} else {
|
|
result = response
|
|
.then(r => r.arrayBuffer())
|
|
.then(bytes => WebAssembly.instantiate(bytes, imports));
|
|
}
|
|
} else {
|
|
|
|
result = WebAssembly.instantiate(module, imports)
|
|
.then(result => {
|
|
if (result instanceof WebAssembly.Instance) {
|
|
return { instance: result, module };
|
|
} else {
|
|
return result;
|
|
}
|
|
});
|
|
}
|
|
return result.then(({instance, module}) => {
|
|
wasm = instance.exports;
|
|
init.__wbindgen_wasm_module = module;
|
|
|
|
return wasm;
|
|
});
|
|
}
|
|
|
|
self.wasm_bindgen = Object.assign(init, __exports);
|
|
|
|
})();
|