From 8006a1a5e7faef69b793ac4d0fc6c595ba1be85f Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Tue, 21 Aug 2018 09:27:04 +0100 Subject: [PATCH] Memory view rather than pointers (#144). Part of #141. * Returning an object seems to work well * This doesn't work * This does! * Better cast? * Updating usage in Squoosh --- codecs/mozjpeg_enc/README.md | 35 +++++++++++----------- codecs/mozjpeg_enc/example.html | 11 +------ codecs/mozjpeg_enc/mozjpeg_enc.cpp | 39 +++++++----------------- codecs/mozjpeg_enc/mozjpeg_enc.d.ts | 7 +---- codecs/mozjpeg_enc/mozjpeg_enc.js | 2 +- codecs/mozjpeg_enc/mozjpeg_enc.wasm | Bin 269430 -> 269528 bytes codecs/webp_enc/README.md | 22 ++------------ codecs/webp_enc/example.html | 23 +++++--------- codecs/webp_enc/webp_enc.cpp | 43 ++++++++++----------------- codecs/webp_enc/webp_enc.d.ts | 6 +--- codecs/webp_enc/webp_enc.js | 2 +- codecs/webp_enc/webp_enc.wasm | Bin 284263 -> 284773 bytes src/codecs/mozjpeg/Encoder.worker.ts | 9 +----- src/codecs/webp/Encoder.worker.ts | 9 +----- 14 files changed, 62 insertions(+), 146 deletions(-) diff --git a/codecs/mozjpeg_enc/README.md b/codecs/mozjpeg_enc/README.md index 31951145..d4b1ed1a 100644 --- a/codecs/mozjpeg_enc/README.md +++ b/codecs/mozjpeg_enc/README.md @@ -19,26 +19,27 @@ See `example.html` Returns the version of MozJPEG as a number. va.b.c is encoded as 0x0a0b0c -### `uint8_t* create_buffer(int width, int height)` - -Allocates an RGBA buffer for an image with the given dimension. - -### `void destroy_buffer(uint8_t* p)` - -Frees a buffer created with `create_buffer`. - -### `void encode(uint8_t* image_buffer, int image_width, int image_height, int quality)` - -Encodes the given image with given dimension to JPEG. `quality` is a number between 0 and 100. The higher the number, the better the quality of the encoded image. The result is implicitly stored and can be accessed using the `get_result_*()` functions. - ### `void free_result()` Frees the result created by `encode()`. -### `int get_result_pointer()` +### `Uint8Array encode(std::string image_in, int image_width, int image_height, MozJpegOptions opts)` -Returns the pointer to the start of the buffer holding the encoded data. +Encodes the given image with given dimension to JPEG. Options looks like this: -### `int get_result_size()` - -Returns the length of the buffer holding the encoded data. +```c++ +struct MozJpegOptions { + int quality; + bool baseline; + bool arithmetic; + bool progressive; + bool optimize_coding; + int smoothing; + int color_space; + int quant_table; + bool trellis_multipass; + bool trellis_opt_zero; + bool trellis_opt_table; + int trellis_loops; +}; +``` diff --git a/codecs/mozjpeg_enc/example.html b/codecs/mozjpeg_enc/example.html index f997cc5c..f8fe25d9 100644 --- a/codecs/mozjpeg_enc/example.html +++ b/codecs/mozjpeg_enc/example.html @@ -20,9 +20,7 @@ module.onRuntimeInitialized = async _ => { console.log('Version:', module.version().toString(16)); const image = await loadImage('../example.png'); - const p = module.create_buffer(image.width, image.height); - module.HEAP8.set(image.data, p); - module.encode(p, image.width, image.height, { + const result = module.encode(image.data, image.width, image.height, { quality: 40, baseline: false, arithmetic: false, @@ -36,13 +34,6 @@ trellis_opt_table: true, trellis_loops: 1, }); - const resultPointer = module.get_result_pointer(); - const resultSize = module.get_result_size(); - console.log('size', resultSize); - const resultView = new Uint8Array(module.HEAP8.buffer, resultPointer, resultSize); - const result = new Uint8Array(resultView); - module.free_result(); - module.destroy_buffer(p); const blob = new Blob([result], {type: 'image/jpeg'}); const blobURL = URL.createObjectURL(blob); diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.cpp b/codecs/mozjpeg_enc/mozjpeg_enc.cpp index 6b7b8677..0cc01e27 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.cpp +++ b/codecs/mozjpeg_enc/mozjpeg_enc.cpp @@ -1,10 +1,10 @@ -#include "emscripten.h" +#include +#include #include #include #include #include #include -#include #include "config.h" #include "jpeglib.h" #include "cdjpeg.h" @@ -47,17 +47,10 @@ int version() { return version; } -int create_buffer(int width, int height) { - return (int) malloc(width * height * 4 * sizeof(uint8_t)); -} +uint8_t* last_result; -void destroy_buffer(int p) { - free((uint8_t*) p); -} - -int result[2]; -void encode(int image_in, int image_width, int image_height, MozJpegOptions opts) { - uint8_t* image_buffer = (uint8_t*) image_in; +val encode(std::string image_in, int image_width, int image_height, MozJpegOptions opts) { + uint8_t* image_buffer = (uint8_t*) image_in.c_str(); // The code below is basically the `write_JPEG_file` function from // https://github.com/mozilla/mozjpeg/blob/master/example.c @@ -191,25 +184,17 @@ void encode(int image_in, int image_width, int image_height, MozJpegOptions opts jpeg_finish_compress(&cinfo); /* Step 7: release JPEG compression object */ - result[0] = (int)output; - result[1] = size; - /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_compress(&cinfo); + last_result = output; + /* And we're done! */ + return val(typed_memory_view(size, output)); } void free_result() { - free((void*)result[0]); // not sure if this is right with mozjpeg -} - -int get_result_pointer() { - return result[0]; -} - -int get_result_size() { - return result[1]; + free(last_result); // not sure if this is right with mozjpeg } EMSCRIPTEN_BINDINGS(my_module) { @@ -229,10 +214,6 @@ EMSCRIPTEN_BINDINGS(my_module) { ; function("version", &version); - function("create_buffer", &create_buffer, allow_raw_pointers()); - function("destroy_buffer", &destroy_buffer, allow_raw_pointers()); - function("encode", &encode, allow_raw_pointers()); + function("encode", &encode); function("free_result", &free_result); - function("get_result_pointer", &get_result_pointer, allow_raw_pointers()); - function("get_result_size", &get_result_size, allow_raw_pointers()); } diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.d.ts b/codecs/mozjpeg_enc/mozjpeg_enc.d.ts index 4bec4b29..a4d064df 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.d.ts +++ b/codecs/mozjpeg_enc/mozjpeg_enc.d.ts @@ -1,13 +1,8 @@ import { EncodeOptions } from '../../src/codecs/mozjpeg/encoder'; interface MozJPEGModule extends EmscriptenWasm.Module { - create_buffer(width: number, height: number): number; - encode(pointer: number, width: number, height: number, options: EncodeOptions): void; - get_result_pointer(): number; - get_result_size(): number; + encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array; free_result(): void; - destroy_buffer(pointer: number): void; } - export default function(opts: EmscriptenWasm.ModuleOpts): MozJPEGModule; diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.js b/codecs/mozjpeg_enc/mozjpeg_enc.js index b25423bf..77b7a0ab 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.js +++ b/codecs/mozjpeg_enc/mozjpeg_enc.js @@ -1,7 +1,7 @@ var mozjpeg_enc = function(mozjpeg_enc) { mozjpeg_enc = mozjpeg_enc || {}; -var Module=typeof mozjpeg_enc!=="undefined"?mozjpeg_enc:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="mozjpeg_enc.wast";var wasmBinaryFile="mozjpeg_enc.wasm";var asmjsCodeFile="mozjpeg_enc.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}if(destructors!==null){destructors.push(_free,ptr)}return ptr}),"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:(function(ptr){_free(ptr)})})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=(function(){return HEAPU16});shift=1}else if(charSize===4){getHeap=(function(){return HEAPU32});shift=2}registerType(rawType,{name:name,"fromWireType":(function(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(){return _llvm_exp2_f32.apply(null,arguments)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=216;Module["wasmMaxTableSize"]=216;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"__embind_finalize_value_object":__embind_finalize_value_object,"__embind_register_bool":__embind_register_bool,"__embind_register_emval":__embind_register_emval,"__embind_register_float":__embind_register_float,"__embind_register_function":__embind_register_function,"__embind_register_integer":__embind_register_integer,"__embind_register_memory_view":__embind_register_memory_view,"__embind_register_std_string":__embind_register_std_string,"__embind_register_std_wstring":__embind_register_std_wstring,"__embind_register_value_object":__embind_register_value_object,"__embind_register_value_object_field":__embind_register_value_object_field,"__embind_register_void":__embind_register_void,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_exit":_exit,"_getenv":_getenv,"_llvm_exp2_f64":_llvm_exp2_f64,"_pthread_getspecific":_pthread_getspecific,"_pthread_key_create":_pthread_key_create,"_pthread_once":_pthread_once,"_pthread_setspecific":_pthread_setspecific,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_bind_cpp"].apply(null,arguments)});var __GLOBAL__sub_I_mozjpeg_enc_cpp=Module["__GLOBAL__sub_I_mozjpeg_enc_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_mozjpeg_enc_cpp"].apply(null,arguments)});var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var ___getTypeName=Module["___getTypeName"]=(function(){return Module["asm"]["___getTypeName"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var dynCall_i=Module["dynCall_i"]=(function(){return Module["asm"]["dynCall_i"].apply(null,arguments)});var dynCall_ii=Module["dynCall_ii"]=(function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)});var dynCall_iii=Module["dynCall_iii"]=(function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)});var dynCall_iiii=Module["dynCall_iiii"]=(function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)});var dynCall_iiiii=Module["dynCall_iiiii"]=(function(){return Module["asm"]["dynCall_iiiii"].apply(null,arguments)});var dynCall_iiiiii=Module["dynCall_iiiiii"]=(function(){return Module["asm"]["dynCall_iiiiii"].apply(null,arguments)});var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=(function(){return Module["asm"]["dynCall_iiiiiii"].apply(null,arguments)});var dynCall_v=Module["dynCall_v"]=(function(){return Module["asm"]["dynCall_v"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});var dynCall_vii=Module["dynCall_vii"]=(function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)});var dynCall_viii=Module["dynCall_viii"]=(function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)});var dynCall_viiii=Module["dynCall_viiii"]=(function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)});var dynCall_viiiii=Module["dynCall_viiiii"]=(function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)});var dynCall_viiiiii=Module["dynCall_viiiiii"]=(function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)});var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiii"].apply(null,arguments)});var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiiii"].apply(null,arguments)});Module["asm"]=asm;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() +var Module=typeof mozjpeg_enc!=="undefined"?mozjpeg_enc:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="mozjpeg_enc.wast";var wasmBinaryFile="mozjpeg_enc.wasm";var asmjsCodeFile="mozjpeg_enc.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}if(destructors!==null){destructors.push(_free,ptr)}return ptr}),"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:(function(ptr){_free(ptr)})})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=(function(){return HEAPU16});shift=1}else if(charSize===4){getHeap=(function(){return HEAPU32});shift=2}registerType(rawType,{name:name,"fromWireType":(function(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i>2]=length;var start=ptr+4>>shift;for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){Module["abort"]()}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=staticAlloc(TOTAL_ENV_SIZE);envPtr=staticAlloc(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(){return _llvm_exp2_f32.apply(null,arguments)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=212;Module["wasmMaxTableSize"]=212;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"__embind_finalize_value_object":__embind_finalize_value_object,"__embind_register_bool":__embind_register_bool,"__embind_register_emval":__embind_register_emval,"__embind_register_float":__embind_register_float,"__embind_register_function":__embind_register_function,"__embind_register_integer":__embind_register_integer,"__embind_register_memory_view":__embind_register_memory_view,"__embind_register_std_string":__embind_register_std_string,"__embind_register_std_wstring":__embind_register_std_wstring,"__embind_register_value_object":__embind_register_value_object,"__embind_register_value_object_field":__embind_register_value_object_field,"__embind_register_void":__embind_register_void,"__emval_decref":__emval_decref,"__emval_incref":__emval_incref,"__emval_take_value":__emval_take_value,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_exit":_exit,"_getenv":_getenv,"_llvm_exp2_f64":_llvm_exp2_f64,"_pthread_getspecific":_pthread_getspecific,"_pthread_key_create":_pthread_key_create,"_pthread_once":_pthread_once,"_pthread_setspecific":_pthread_setspecific,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_bind_cpp"].apply(null,arguments)});var __GLOBAL__sub_I_mozjpeg_enc_cpp=Module["__GLOBAL__sub_I_mozjpeg_enc_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_mozjpeg_enc_cpp"].apply(null,arguments)});var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var ___getTypeName=Module["___getTypeName"]=(function(){return Module["asm"]["___getTypeName"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var dynCall_i=Module["dynCall_i"]=(function(){return Module["asm"]["dynCall_i"].apply(null,arguments)});var dynCall_ii=Module["dynCall_ii"]=(function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)});var dynCall_iii=Module["dynCall_iii"]=(function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)});var dynCall_iiii=Module["dynCall_iiii"]=(function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)});var dynCall_iiiii=Module["dynCall_iiiii"]=(function(){return Module["asm"]["dynCall_iiiii"].apply(null,arguments)});var dynCall_iiiiii=Module["dynCall_iiiiii"]=(function(){return Module["asm"]["dynCall_iiiiii"].apply(null,arguments)});var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=(function(){return Module["asm"]["dynCall_iiiiiii"].apply(null,arguments)});var dynCall_v=Module["dynCall_v"]=(function(){return Module["asm"]["dynCall_v"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});var dynCall_vii=Module["dynCall_vii"]=(function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)});var dynCall_viii=Module["dynCall_viii"]=(function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)});var dynCall_viiii=Module["dynCall_viiii"]=(function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)});var dynCall_viiiii=Module["dynCall_viiiii"]=(function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)});var dynCall_viiiiii=Module["dynCall_viiiiii"]=(function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)});var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiii"].apply(null,arguments)});var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiiii"].apply(null,arguments)});Module["asm"]=asm;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.wasm b/codecs/mozjpeg_enc/mozjpeg_enc.wasm index 20b1697fda4653db82834638b8ffca9143ea7f66..723bb828553a42c6c18180dce558d9f34779f996 100644 GIT binary patch delta 24432 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 D`GDK( diff --git a/codecs/webp_enc/README.md b/codecs/webp_enc/README.md index 031cf82e..1882a003 100644 --- a/codecs/webp_enc/README.md +++ b/codecs/webp_enc/README.md @@ -17,26 +17,10 @@ See `example.html` Returns the version of libwebp as a number. va.b.c is encoded as 0x0a0b0c -### `uint8_t* create_buffer(int width, int height)` +### `UInt8Array encode(uint8_t* image_buffer, int image_width, int image_height, WebPConfig config)` -Allocates an RGBA buffer for an image with the given dimension. - -### `void destroy_buffer(uint8_t* p)` - -Frees a buffer created with `create_buffer`. - -### `void encode(uint8_t* image_buffer, int image_width, int image_height, float quality)` - -Encodes the given image with given dimension to WebP. `quality` is a number between 0 and 100. The higher the number, the better the quality of the encoded image. The result is implicitly stored and can be accessed using the `get_result_*()` functions. +Encodes the given image with given dimension to WebP. ### `void free_result()` -Frees the result created by `encode()`. - -### `int get_result_pointer()` - -Returns the pointer to the start of the buffer holding the encoded data. - -### `int get_result_size()` - -Returns the length of the buffer holding the encoded data. +Frees the last result created by `encode()`. diff --git a/codecs/webp_enc/example.html b/codecs/webp_enc/example.html index b1fe0a35..89cb7825 100644 --- a/codecs/webp_enc/example.html +++ b/codecs/webp_enc/example.html @@ -20,14 +20,11 @@ module.onRuntimeInitialized = async _ => { console.log('Version:', module.version().toString(16)); const image = await loadImage('../example.png'); - const p = module.create_buffer(image.width, image.height); - module.HEAP8.set(image.data, p); - module.encode(p, image.width, image.height, { - quality: 100, - image_hint: 0, + const result = module.encode(image.data, image.width, image.height, { + quality: 75, target_size: 0, target_PSNR: 0, - method: 6, + method: 4, sns_strength: 50, filter_strength: 60, filter_sharpness: 0, @@ -42,7 +39,7 @@ alpha_compression: 1, alpha_filtering: 1, alpha_quality: 100, - lossless: 1, + lossless: 0, exact: 0, image_hint: 0, emulate_jpeg_size: 0, @@ -52,15 +49,11 @@ use_delta_palette: 0, use_sharp_yuv: 0, }); - const resultPointer = module.get_result_pointer(); - const resultSize = module.get_result_size(); - console.log('size', resultSize); - const resultView = new Uint8Array(module.HEAP8.buffer, resultPointer, resultSize); - const result = new Uint8Array(resultView); - module.free_result(); - module.destroy_buffer(p); - + console.log('size', result.length); const blob = new Blob([result], {type: 'image/webp'}); + + module.free_result(); + const blobURL = URL.createObjectURL(blob); const img = document.createElement('img'); img.src = blobURL; diff --git a/codecs/webp_enc/webp_enc.cpp b/codecs/webp_enc/webp_enc.cpp index 0d43983b..703557e7 100644 --- a/codecs/webp_enc/webp_enc.cpp +++ b/codecs/webp_enc/webp_enc.cpp @@ -1,7 +1,9 @@ -#include "emscripten.h" +#include +#include #include "src/webp/encode.h" #include -#include +#include +#include using namespace emscripten; @@ -9,23 +11,19 @@ int version() { return WebPGetEncoderVersion(); } -int create_buffer(int width, int height) { - return (int) malloc(width * height * 4 * sizeof(uint8_t)); -} +uint8_t* last_result; -void destroy_buffer(int p) { - free((uint8_t*) p); -} +val encode(std::string img, int width, int height, WebPConfig config) { + uint8_t* img_in = (uint8_t*) img.c_str(); -int result[2]; -void encode(int img_in, int width, int height, WebPConfig config) { // A lot of this is duplicated from Encode in picture_enc.c WebPPicture pic; WebPMemoryWriter wrt; int ok; if (!WebPPictureInit(&pic)) { - return; // shouldn't happen, except if system installation is broken + // shouldn't happen, except if system installation is broken + throw std::runtime_error("Unexpected error"); } pic.use_argb = !!config.lossless; @@ -40,23 +38,18 @@ void encode(int img_in, int width, int height, WebPConfig config) { WebPPictureFree(&pic); if (!ok) { WebPMemoryWriterClear(&wrt); - return; + throw std::runtime_error("Encode failed"); } - result[0] = (int)wrt.mem; - result[1] = wrt.size; + + last_result = wrt.mem; + + return val(typed_memory_view(wrt.size, wrt.mem)); } void free_result() { - WebPFree((void*)result[0]); + WebPFree(last_result); } -int get_result_pointer() { - return result[0]; -} - -int get_result_size() { - return result[1]; -} EMSCRIPTEN_BINDINGS(my_module) { enum_("WebPImageHint") @@ -97,10 +90,6 @@ EMSCRIPTEN_BINDINGS(my_module) { ; function("version", &version); - function("create_buffer", &create_buffer, allow_raw_pointers()); - function("destroy_buffer", &destroy_buffer, allow_raw_pointers()); - function("encode", &encode, allow_raw_pointers()); + function("encode", &encode); function("free_result", &free_result); - function("get_result_pointer", &get_result_pointer, allow_raw_pointers()); - function("get_result_size", &get_result_size, allow_raw_pointers()); } diff --git a/codecs/webp_enc/webp_enc.d.ts b/codecs/webp_enc/webp_enc.d.ts index 72a39e3e..259b2b9e 100644 --- a/codecs/webp_enc/webp_enc.d.ts +++ b/codecs/webp_enc/webp_enc.d.ts @@ -1,12 +1,8 @@ import { EncodeOptions } from '../../src/codecs/webp/encoder'; interface WebPModule extends EmscriptenWasm.Module { - create_buffer(width: number, height: number): number; - encode(pointer: number, width: number, height: number, options: EncodeOptions): void; - get_result_pointer(): number; - get_result_size(): number; + encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array; free_result(): void; - destroy_buffer(pointer: number): void; } diff --git a/codecs/webp_enc/webp_enc.js b/codecs/webp_enc/webp_enc.js index 00878623..64591d93 100644 --- a/codecs/webp_enc/webp_enc.js +++ b/codecs/webp_enc/webp_enc.js @@ -1,7 +1,7 @@ var webp_enc = function(webp_enc) { webp_enc = webp_enc || {}; -var Module=typeof webp_enc!=="undefined"?webp_enc:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="webp_enc.wast";var wasmBinaryFile="webp_enc.wasm";var asmjsCodeFile="webp_enc.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])});case 2:return(function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])});default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":(function(c){return this.constructor.values[c]}),"toWireType":(function(destructors,c){return c.value}),"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,(function(){}))}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return(function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}if(destructors!==null){destructors.push(_free,ptr)}return ptr}),"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:(function(ptr){_free(ptr)})})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=(function(){return HEAPU16});shift=1}else if(charSize===4){getHeap=(function(){return HEAPU32});shift=2}registerType(rawType,{name:name,"fromWireType":(function(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=254;Module["wasmMaxTableSize"]=254;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"__embind_finalize_value_object":__embind_finalize_value_object,"__embind_register_bool":__embind_register_bool,"__embind_register_emval":__embind_register_emval,"__embind_register_enum":__embind_register_enum,"__embind_register_enum_value":__embind_register_enum_value,"__embind_register_float":__embind_register_float,"__embind_register_function":__embind_register_function,"__embind_register_integer":__embind_register_integer,"__embind_register_memory_view":__embind_register_memory_view,"__embind_register_std_string":__embind_register_std_string,"__embind_register_std_wstring":__embind_register_std_wstring,"__embind_register_value_object":__embind_register_value_object,"__embind_register_value_object_field":__embind_register_value_object_field,"__embind_register_void":__embind_register_void,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_pthread_getspecific":_pthread_getspecific,"_pthread_key_create":_pthread_key_create,"_pthread_once":_pthread_once,"_pthread_setspecific":_pthread_setspecific,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_bind_cpp"].apply(null,arguments)});var __GLOBAL__sub_I_webp_enc_cpp=Module["__GLOBAL__sub_I_webp_enc_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_webp_enc_cpp"].apply(null,arguments)});var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var ___getTypeName=Module["___getTypeName"]=(function(){return Module["asm"]["___getTypeName"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var dynCall_diiii=Module["dynCall_diiii"]=(function(){return Module["asm"]["dynCall_diiii"].apply(null,arguments)});var dynCall_fii=Module["dynCall_fii"]=(function(){return Module["asm"]["dynCall_fii"].apply(null,arguments)});var dynCall_i=Module["dynCall_i"]=(function(){return Module["asm"]["dynCall_i"].apply(null,arguments)});var dynCall_ii=Module["dynCall_ii"]=(function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)});var dynCall_iii=Module["dynCall_iii"]=(function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)});var dynCall_iiii=Module["dynCall_iiii"]=(function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)});var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=(function(){return Module["asm"]["dynCall_iiiiiii"].apply(null,arguments)});var dynCall_v=Module["dynCall_v"]=(function(){return Module["asm"]["dynCall_v"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});var dynCall_vii=Module["dynCall_vii"]=(function(){return Module["asm"]["dynCall_vii"].apply(null,arguments)});var dynCall_viif=Module["dynCall_viif"]=(function(){return Module["asm"]["dynCall_viif"].apply(null,arguments)});var dynCall_viii=Module["dynCall_viii"]=(function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)});var dynCall_viiii=Module["dynCall_viiii"]=(function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)});var dynCall_viiiii=Module["dynCall_viiiii"]=(function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)});var dynCall_viiiiii=Module["dynCall_viiiiii"]=(function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)});var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiiiii"].apply(null,arguments)});Module["asm"]=asm;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() +var Module=typeof webp_enc!=="undefined"?webp_enc:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="webp_enc.wast";var wasmBinaryFile="webp_enc.wasm";var asmjsCodeFile="webp_enc.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])});case 2:return(function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])});default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":(function(c){return this.constructor.values[c]}),"toWireType":(function(destructors,c){return c.value}),"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,(function(){}))}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return(function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])});case 3:return(function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])});default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){return value}),"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",(function(){}));dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}if(destructors!==null){destructors.push(_free,ptr)}return ptr}),"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:(function(ptr){_free(ptr)})})}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=(function(){return HEAPU16});shift=1}else if(charSize===4){getHeap=(function(){return HEAPU32});shift=2}registerType(rawType,{name:name,"fromWireType":(function(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i>2]=length;var start=ptr+4>>shift;for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){Module["abort"]()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=250;Module["wasmMaxTableSize"]=250;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___cxa_allocate_exception":___cxa_allocate_exception,"___cxa_throw":___cxa_throw,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"__embind_finalize_value_object":__embind_finalize_value_object,"__embind_register_bool":__embind_register_bool,"__embind_register_emval":__embind_register_emval,"__embind_register_enum":__embind_register_enum,"__embind_register_enum_value":__embind_register_enum_value,"__embind_register_float":__embind_register_float,"__embind_register_function":__embind_register_function,"__embind_register_integer":__embind_register_integer,"__embind_register_memory_view":__embind_register_memory_view,"__embind_register_std_string":__embind_register_std_string,"__embind_register_std_wstring":__embind_register_std_wstring,"__embind_register_value_object":__embind_register_value_object,"__embind_register_value_object_field":__embind_register_value_object_field,"__embind_register_void":__embind_register_void,"__emval_decref":__emval_decref,"__emval_incref":__emval_incref,"__emval_take_value":__emval_take_value,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_pthread_getspecific":_pthread_getspecific,"_pthread_key_create":_pthread_key_create,"_pthread_once":_pthread_once,"_pthread_setspecific":_pthread_setspecific,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_bind_cpp"].apply(null,arguments)});var __GLOBAL__sub_I_webp_enc_cpp=Module["__GLOBAL__sub_I_webp_enc_cpp"]=(function(){return Module["asm"]["__GLOBAL__sub_I_webp_enc_cpp"].apply(null,arguments)});var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var ___getTypeName=Module["___getTypeName"]=(function(){return Module["asm"]["___getTypeName"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var dynCall_diiii=Module["dynCall_diiii"]=(function(){return Module["asm"]["dynCall_diiii"].apply(null,arguments)});var dynCall_fii=Module["dynCall_fii"]=(function(){return Module["asm"]["dynCall_fii"].apply(null,arguments)});var dynCall_i=Module["dynCall_i"]=(function(){return Module["asm"]["dynCall_i"].apply(null,arguments)});var dynCall_ii=Module["dynCall_ii"]=(function(){return Module["asm"]["dynCall_ii"].apply(null,arguments)});var dynCall_iii=Module["dynCall_iii"]=(function(){return Module["asm"]["dynCall_iii"].apply(null,arguments)});var dynCall_iiii=Module["dynCall_iiii"]=(function(){return Module["asm"]["dynCall_iiii"].apply(null,arguments)});var dynCall_iiiiii=Module["dynCall_iiiiii"]=(function(){return Module["asm"]["dynCall_iiiiii"].apply(null,arguments)});var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=(function(){return Module["asm"]["dynCall_iiiiiii"].apply(null,arguments)});var dynCall_v=Module["dynCall_v"]=(function(){return Module["asm"]["dynCall_v"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});var dynCall_viif=Module["dynCall_viif"]=(function(){return Module["asm"]["dynCall_viif"].apply(null,arguments)});var dynCall_viii=Module["dynCall_viii"]=(function(){return Module["asm"]["dynCall_viii"].apply(null,arguments)});var dynCall_viiii=Module["dynCall_viiii"]=(function(){return Module["asm"]["dynCall_viiii"].apply(null,arguments)});var dynCall_viiiii=Module["dynCall_viiiii"]=(function(){return Module["asm"]["dynCall_viiiii"].apply(null,arguments)});var dynCall_viiiiii=Module["dynCall_viiiiii"]=(function(){return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)});var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=(function(){return Module["asm"]["dynCall_viiiiiiiii"].apply(null,arguments)});Module["asm"]=asm;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() diff --git a/codecs/webp_enc/webp_enc.wasm b/codecs/webp_enc/webp_enc.wasm index ab01e610a679cb9c64b4f684cb9cb53cf80fcbaf..da6e4d119224343e398c7482ca1bf8b99a696816 100644 GIT binary patch delta 42973 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 Ht#;+VZn+YN delta 42325 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 ZeUm=mB-mdB{70NqQDKhsNIA>=;9o;}s9yj8 diff --git a/src/codecs/mozjpeg/Encoder.worker.ts b/src/codecs/mozjpeg/Encoder.worker.ts index ad549b31..4839cf00 100644 --- a/src/codecs/mozjpeg/Encoder.worker.ts +++ b/src/codecs/mozjpeg/Encoder.worker.ts @@ -33,16 +33,9 @@ export default class MozJpegEncoder { async encode(data: ImageData, options: EncodeOptions): Promise { const module = await this.emscriptenModule; - - const p = module.create_buffer(data.width, data.height); - module.HEAP8.set(data.data, p); - module.encode(p, data.width, data.height, options); - const resultPointer = module.get_result_pointer(); - const resultSize = module.get_result_size(); - const resultView = new Uint8Array(module.HEAP8.buffer, resultPointer, resultSize); + const resultView = module.encode(data.data, data.width, data.height, options); const result = new Uint8Array(resultView); module.free_result(); - module.destroy_buffer(p); // wasm can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer. return result.buffer as ArrayBuffer; diff --git a/src/codecs/webp/Encoder.worker.ts b/src/codecs/webp/Encoder.worker.ts index 10f84403..2c2f0c82 100644 --- a/src/codecs/webp/Encoder.worker.ts +++ b/src/codecs/webp/Encoder.worker.ts @@ -34,17 +34,10 @@ export default class WebPEncoder { async encode(data: ImageData, options: EncodeOptions): Promise { const module = await this.emscriptenModule; - const p = module.create_buffer(data.width, data.height); - module.HEAP8.set(data.data, p); - module.encode(p, data.width, data.height, options); - const resultPointer = module.get_result_pointer(); - const resultSize = module.get_result_size(); - const resultView = new Uint8Array(module.HEAP8.buffer, resultPointer, resultSize); + const resultView = module.encode(data.data, data.width, data.height, options); const result = new Uint8Array(resultView); module.free_result(); - module.destroy_buffer(p); - // wasm can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer. return result.buffer as ArrayBuffer; } }