diff --git a/codecs/basis/enc/basis_enc.cpp b/codecs/basis/enc/basis_enc.cpp index 6b9956c5..8bdcdf31 100644 --- a/codecs/basis/enc/basis_enc.cpp +++ b/codecs/basis/enc/basis_enc.cpp @@ -7,7 +7,9 @@ using namespace emscripten; using namespace basisu; -struct BasisOptions {}; +struct BasisOptions { + uint8_t quality; +}; thread_local const val Uint8Array = val::global("Uint8Array"); @@ -26,7 +28,7 @@ val encode(std::string image_in, int image_width, int image_height, BasisOptions params.m_uastc = true; // No printf pls params.m_status_output = false; - params.m_compression_level = 2; /* 0-4 */ + params.m_compression_level = opts.quality; params.m_source_images.push_back(img); if (!compressor.init(params)) { @@ -44,8 +46,7 @@ val encode(std::string image_in, int image_width, int image_height, BasisOptions } EMSCRIPTEN_BINDINGS(my_module) { - value_object("BasisOptions"); - // .field("quality", &MozJpegOptions::quality); + value_object("BasisOptions").field("quality", &BasisOptions::quality); function("encode", &encode); } diff --git a/codecs/basis/enc/basis_enc.d.ts b/codecs/basis/enc/basis_enc.d.ts index cdcc8f3b..bed974a3 100644 --- a/codecs/basis/enc/basis_enc.d.ts +++ b/codecs/basis/enc/basis_enc.d.ts @@ -1,4 +1,5 @@ export interface EncodeOptions { + quality: number; } export interface BasisModule extends EmscriptenWasm.Module { diff --git a/codecs/basis/enc/basis_enc.js b/codecs/basis/enc/basis_enc.js index e95036c0..7ad8cc87 100644 --- a/codecs/basis/enc/basis_enc.js +++ b/codecs/basis/enc/basis_enc.js @@ -8,53 +8,53 @@ function(Module) { var f;f||(f=typeof Module !== 'undefined' ? Module : {});var aa,ba;f.ready=new Promise(function(a,b){aa=a;ba=b});var r={},t;for(t in f)f.hasOwnProperty(t)&&(r[t]=f[t]);var u="",ca;u=self.location.href;_scriptDir&&(u=_scriptDir);0!==u.indexOf("blob:")?u=u.substr(0,u.lastIndexOf("/")+1):u="";ca=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)};var da=f.print||console.log.bind(console),v=f.printErr||console.warn.bind(console); -for(t in r)r.hasOwnProperty(t)&&(f[t]=r[t]);r=null;var ea=0,w;f.wasmBinary&&(w=f.wasmBinary);var noExitRuntime;f.noExitRuntime&&(noExitRuntime=f.noExitRuntime);"object"!==typeof WebAssembly&&x("no native wasm support detected");var B,fa=!1,ha=new TextDecoder("utf8");function C(a,b){if(!a)return"";b=a+b;for(var c=a;!(c>=b)&&D[c];)++c;return ha.decode(D.subarray(a,c))} -function ja(a,b,c){var d=D;if(0=g){var k=a.charCodeAt(++e);g=65536+((g&1023)<<10)|k&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var ka=new TextDecoder("utf-16le"); -function la(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&ma[c];)++c;return ka.decode(D.subarray(a,c<<1))}function na(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;E[b>>1]=0;return b-d}function oa(a){return 2*a.length}function pa(a,b){for(var c=0,d="";!(c>=b/4);){var e=F[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d} -function qa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=g){var k=a.charCodeAt(++e);g=65536+((g&1023)<<10)|k&1023}F[b>>2]=g;b+=4;if(b+4>c)break}F[b>>2]=0;return b-d}function ra(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var G,I,D,E,ma,F,J,sa,ta; -function ua(a){G=a;f.HEAP8=I=new Int8Array(a);f.HEAP16=E=new Int16Array(a);f.HEAP32=F=new Int32Array(a);f.HEAPU8=D=new Uint8Array(a);f.HEAPU16=ma=new Uint16Array(a);f.HEAPU32=J=new Uint32Array(a);f.HEAPF32=sa=new Float32Array(a);f.HEAPF64=ta=new Float64Array(a)}var va=f.INITIAL_MEMORY||16777216;f.wasmMemory?B=f.wasmMemory:B=new WebAssembly.Memory({initial:va/65536,maximum:32768});B&&(G=B.buffer);va=G.byteLength;ua(G);var K,wa=[],xa=[],ya=[],za=[]; -function Aa(){var a=f.preRun.shift();wa.unshift(a)}var L=0,Ba=null,M=null;f.preloadedImages={};f.preloadedAudios={};function x(a){if(f.onAbort)f.onAbort(a);v(a);fa=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;}function Ca(){var a=N;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var N="basis_enc.wasm"; -if(!Ca()){var Da=N;N=f.locateFile?f.locateFile(Da,u):u+Da}function Ea(){try{if(w)return new Uint8Array(w);if(ca)return ca(N);throw"both async and sync fetching of the wasm failed";}catch(a){x(a)}}function Fa(){return w||"function"!==typeof fetch?Promise.resolve().then(Ea):fetch(N,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+N+"'";return a.arrayBuffer()}).catch(function(){return Ea()})} -function Ga(a){for(;0>2]=b};this.pa=function(b){F[this.da+0>>2]=b};this.qa=function(){F[this.da+4>>2]=0};this.oa=function(){I[this.da+12>>0]=0};this.ra=function(){I[this.da+13>>0]=0};this.la=function(b,c){this.sa(b);this.pa(c);this.qa();this.oa();this.ra()}} -function Ia(){return 0>2])}var O={},P={},Oa={};function Pa(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Qa(a,b){a=Pa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} -function Ra(a){var b=Error,c=Qa(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Sa=void 0; -function Ta(a,b,c){function d(h){h=c(h);if(h.length!==a.length)throw new Sa("Mismatched type converter count");for(var l=0;l>2])};case 3:return function(c){return this.fromWireType(ta[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function ab(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Qa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} -function bb(a,b){var c=f;if(void 0===c[a].ba){var d=c[a];c[a]=function(){c[a].ba.hasOwnProperty(arguments.length)||S("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].ba+")!");return c[a].ba[arguments.length].apply(this,arguments)};c[a].ba=[];c[a].ba[d.ha]=d}} -function cb(a,b,c){f.hasOwnProperty(a)?((void 0===c||void 0!==f[a].ba&&void 0!==f[a].ba[c])&&S("Cannot register public name '"+a+"' twice"),bb(a,a),f.hasOwnProperty(c)&&S("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),f[a].ba[c]=b):(f[a]=b,void 0!==c&&(f[a].Aa=c))}function db(a,b){for(var c=[],d=0;d>2)+d]);return c} -function eb(a,b){0<=a.indexOf("j")||x("Assertion failed: getDynCaller should only be called with i64 sigs");var c=[];return function(){c.length=arguments.length;for(var d=0;d>1]}:function(d){return ma[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return J[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var lb={};function mb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function nb(a,b){var c=P[a];void 0===c&&S(b+" has unknown type "+hb(a));return c}var ob={}; -Sa=f.InternalError=Ra("InternalError");for(var pb=Array(256),qb=0;256>qb;++qb)pb[qb]=String.fromCharCode(qb);Va=pb;Wa=f.BindingError=Ra("BindingError");f.count_emval_handles=function(){for(var a=0,b=5;b>g])},ca:null})},K:function(a,b){b=R(b);Q(a,{name:b,fromWireType:function(c){var d=T[c].value;Ya(c);return d},toWireType:function(c,d){return U(d)},argPackAdvance:8,readValueFromPointer:Na, -ca:null})},v:function(a,b,c){c=Ua(c);b=R(b);Q(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+Za(e)+'" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:$a(b,c),ca:null})},O:function(a,b,c,d,e,g){var k=db(b,c);a=R(a);e=fb(d,e);cb(a,function(){jb("Cannot call "+a+" due to unbound types",k)},b-1);Ta([],k,function(h){var l=a,m=a;h=[h[0],null].concat(h.slice(1));var n=e,q=h.length;2> -q&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var y=null!==h[1]&&!1,z=!1,p=1;p>>h}}var l=-1!=b.indexOf("unsigned");Q(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+Za(n)+'" to '+this.name);if(ne)throw new TypeError('Passing a number "'+Za(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+e+"]!");return l?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:kb(b,k,0!==d),ca:null})},j:function(a,b, -c){function d(g){g>>=2;var k=J;return new e(G,k[g+1],k[g])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=R(c);Q(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ka:!0})},w:function(a,b){b=R(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(d){var e=J[d>>2];if(c)for(var g=d+4,k=0;k<=e;++k){var h=d+4+k;if(k==e||0==D[h]){g=C(g,h-g);if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=h+1}}else{l=Array(e); -for(k=0;k=q&&(q=65536+((q&1023)<<10)|e.charCodeAt(++n)&1023);127>=q?++m:m=2047>=q?m+2:65535>=q?m+3:m+4}return m}: -function(){return e.length})(),h=sb(4+k+1);J[h>>2]=k;if(c&&g)ja(e,h+4,k+1);else if(g)for(g=0;g>2],n=k(),q,y=l+4,z=0;z<=m;++z){var p=l+4+z*b;if(z==m||0==n[p>>h])y=d(y,p-y),void 0===q?q=y:(q+=String.fromCharCode(0),q+=y),y=p+b}V(l);return q},toWireType:function(l,m){"string"!==typeof m&&S("Cannot pass non-string to C++ string type "+c);var n=g(m),q=sb(4+n+b);J[q>>2]=n>>h;e(m,q+4,n+b);null!==l&&l.push(V,q);return q},argPackAdvance:8,readValueFromPointer:Na,ca:function(l){V(l)}})},Q:function(a,b,c,d,e,g){La[a]={name:R(b),ma:fb(c,d),na:fb(e,g),ia:[]}},M:function(a, -b){b=R(b);Q(a,{za:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},n:Ya,z:function(a){if(0===a)return U(mb());var b=lb[a];a=void 0===b?R(a):b;return U(mb()[a])},N:function(a){4>> 2) + "+ -g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",k+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(nb,f,U);ob[b]=e}return e(a,c,d)},y:function(a,b){a=nb(a,"_emval_take_value");a=a.readValueFromPointer(b);return U(a)},f:function(){x()},h:function(a,b){W(a,b||1);throw"longjmp";},D:function(a,b,c){D.copyWithin(a,b,b+c)},l:function(a){a>>>= -0;var b=D.length;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>>16);ua(B.buffer);var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},u:function(){return 0},G:function(a,b,c,d){a=Ka.va(a);b=Ka.ta(a,b,c);F[d>>2]=b;return 0},B:function(){},t:function(a,b,c,d){for(var e=0,g=0;g>2],h=F[b+(8*g+4)>>2],l=0;l>2]=e;return 0},d:function(){return ea|0},i:function(a){var b=Date.now();F[a>>2]=b/1E3|0;F[a+4>>2]=b%1E3*1E3|0;return 0},m:tb,g:ub,r:vb,q:wb,o:xb,e:yb,C:zb,a:B,c:function(a){ea=a|0},F:function(a){switch(a){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809; -case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32; -case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}F[Ab()>>2]=28; -return-1}}; -(function(){function a(e){f.asm=e.exports;K=f.asm.R;L--;f.monitorRunDependencies&&f.monitorRunDependencies(L);0==L&&(null!==Ba&&(clearInterval(Ba),Ba=null),M&&(e=M,M=null,e()))}function b(e){a(e.instance)}function c(e){return Fa().then(function(g){return WebAssembly.instantiate(g,d)}).then(e,function(g){v("failed to asynchronously prepare wasm: "+g);x(g)})}var d={a:Bb};L++;f.monitorRunDependencies&&f.monitorRunDependencies(L);if(f.instantiateWasm)try{return f.instantiateWasm(d,a)}catch(e){return v("Module.instantiateWasm callback failed with error: "+e), -!1}(function(){return w||"function"!==typeof WebAssembly.instantiateStreaming||Ca()||"function"!==typeof fetch?c(b):fetch(N,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(g){v("wasm streaming compile failed: "+g);v("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})(); -var rb=f.___wasm_call_ctors=function(){return(rb=f.___wasm_call_ctors=f.asm.S).apply(null,arguments)},V=f._free=function(){return(V=f._free=f.asm.T).apply(null,arguments)},sb=f._malloc=function(){return(sb=f._malloc=f.asm.U).apply(null,arguments)},ib=f.___getTypeName=function(){return(ib=f.___getTypeName=f.asm.V).apply(null,arguments)};f.___embind_register_native_and_builtin_types=function(){return(f.___embind_register_native_and_builtin_types=f.asm.W).apply(null,arguments)}; -var Ab=f.___errno_location=function(){return(Ab=f.___errno_location=f.asm.X).apply(null,arguments)},X=f.stackSave=function(){return(X=f.stackSave=f.asm.Y).apply(null,arguments)},Z=f.stackRestore=function(){return(Z=f.stackRestore=f.asm.Z).apply(null,arguments)},W=f._setThrew=function(){return(W=f._setThrew=f.asm._).apply(null,arguments)};f.dynCall_jiiii=function(){return(f.dynCall_jiiii=f.asm.$).apply(null,arguments)};f.dynCall_jiji=function(){return(f.dynCall_jiji=f.asm.aa).apply(null,arguments)}; -function yb(a,b,c){var d=X();try{K.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}}function xb(a,b){var c=X();try{K.get(a)(b)}catch(d){Z(c);if(d!==d+0&&"longjmp"!==d)throw d;W(1,0)}}function vb(a,b,c,d){var e=X();try{return K.get(a)(b,c,d)}catch(g){Z(e);if(g!==g+0&&"longjmp"!==g)throw g;W(1,0)}}function ub(a,b,c){var d=X();try{return K.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}} -function tb(a,b){var c=X();try{return K.get(a)(b)}catch(d){Z(c);if(d!==d+0&&"longjmp"!==d)throw d;W(1,0)}}function wb(a,b,c,d,e,g){var k=X();try{return K.get(a)(b,c,d,e,g)}catch(h){Z(k);if(h!==h+0&&"longjmp"!==h)throw h;W(1,0)}}function zb(a,b,c,d,e){var g=X();try{K.get(a)(b,c,d,e)}catch(k){Z(g);if(k!==k+0&&"longjmp"!==k)throw k;W(1,0)}}var Cb;M=function Db(){Cb||Eb();Cb||(M=Db)}; -function Eb(){function a(){if(!Cb&&(Cb=!0,f.calledRun=!0,!fa)){Ga(xa);Ga(ya);aa(f);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"==typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var b=f.postRun.shift();za.unshift(b)}Ga(za)}}if(!(0=b)&&C[c];)++c;return ha.decode(C.subarray(a,c))} +function ja(a,b,c){var d=C;if(0=g){var k=a.charCodeAt(++e);g=65536+((g&1023)<<10)|k&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var la=new TextDecoder("utf-16le"); +function ma(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&na[c];)++c;return la.decode(C.subarray(a,c<<1))}function oa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;D[b>>1]=0;return b-d}function pa(a){return 2*a.length}function qa(a,b){for(var c=0,d="";!(c>=b/4);){var e=E[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d} +function ra(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=g){var k=a.charCodeAt(++e);g=65536+((g&1023)<<10)|k&1023}E[b>>2]=g;b+=4;if(b+4>c)break}E[b>>2]=0;return b-d}function sa(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var F,G,C,D,na,E,I,ta,ua; +function va(a){F=a;f.HEAP8=G=new Int8Array(a);f.HEAP16=D=new Int16Array(a);f.HEAP32=E=new Int32Array(a);f.HEAPU8=C=new Uint8Array(a);f.HEAPU16=na=new Uint16Array(a);f.HEAPU32=I=new Uint32Array(a);f.HEAPF32=ta=new Float32Array(a);f.HEAPF64=ua=new Float64Array(a)}var wa=f.INITIAL_MEMORY||16777216;f.wasmMemory?B=f.wasmMemory:B=new WebAssembly.Memory({initial:wa/65536,maximum:32768});B&&(F=B.buffer);wa=F.byteLength;va(F);var J,xa=[],ya=[],za=[],Aa=[]; +function Ba(){var a=f.preRun.shift();xa.unshift(a)}var K=0,Ca=null,L=null;f.preloadedImages={};f.preloadedAudios={};function x(a){if(f.onAbort)f.onAbort(a);v(a);fa=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;}function Da(){var a=M;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var M="basis_enc.wasm"; +if(!Da()){var Ea=M;M=f.locateFile?f.locateFile(Ea,u):u+Ea}function Fa(){try{if(w)return new Uint8Array(w);if(ca)return ca(M);throw"both async and sync fetching of the wasm failed";}catch(a){x(a)}}function Ga(){return w||"function"!==typeof fetch?Promise.resolve().then(Fa):fetch(M,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+M+"'";return a.arrayBuffer()}).catch(function(){return Fa()})} +function Ha(a){for(;0>2]=b};this.ua=function(b){E[this.ea+0>>2]=b};this.va=function(){E[this.ea+4>>2]=0};this.ta=function(){G[this.ea+12>>0]=0};this.wa=function(){G[this.ea+13>>0]=0};this.qa=function(b,c){this.xa(b);this.ua(c);this.va();this.ta();this.wa()}} +function Ja(){return 0>2])}var N={},O={},Pa={};function Qa(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ra(a,b){a=Qa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} +function Sa(a){var b=Error,c=Ra(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Ta=void 0; +function Ua(a,b,c){function d(h){h=c(h);if(h.length!==a.length)throw new Ta("Mismatched type converter count");for(var l=0;l>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function bb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ra(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function cb(a,b){var c=f;if(void 0===c[a].ca){var d=c[a];c[a]=function(){c[a].ca.hasOwnProperty(arguments.length)||R("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].ca+")!");return c[a].ca[arguments.length].apply(this,arguments)};c[a].ca=[];c[a].ca[d.ja]=d}} +function db(a,b,c){f.hasOwnProperty(a)?((void 0===c||void 0!==f[a].ca&&void 0!==f[a].ca[c])&&R("Cannot register public name '"+a+"' twice"),cb(a,a),f.hasOwnProperty(c)&&R("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),f[a].ca[c]=b):(f[a]=b,void 0!==c&&(f[a].Ea=c))}function eb(a,b){for(var c=[],d=0;d>2)+d]);return c} +function fb(a,b){0<=a.indexOf("j")||x("Assertion failed: getDynCaller should only be called with i64 sigs");var c=[];return function(){c.length=arguments.length;for(var d=0;d>1]}:function(d){return na[d>>1]};case 2:return c?function(d){return E[d>>2]}:function(d){return I[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var lb={};function mb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function nb(a,b){var c=O[a];void 0===c&&R(b+" has unknown type "+hb(a));return c}var ob={}; +Ta=f.InternalError=Sa("InternalError");for(var pb=Array(256),qb=0;256>qb;++qb)pb[qb]=String.fromCharCode(qb);Wa=pb;Xa=f.BindingError=Sa("BindingError");f.count_emval_handles=function(){for(var a=0,b=5;b>g])},da:null})},K:function(a,b){b=Q(b);P(a,{name:b,fromWireType:function(c){var d=S[c].value;Za(c);return d},toWireType:function(c,d){return T(d)},argPackAdvance:8,readValueFromPointer:Oa, +da:null})},v:function(a,b,c){c=Va(c);b=Q(b);P(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+$a(e)+'" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:ab(b,c),da:null})},O:function(a,b,c,d,e,g){var k=eb(b,c);a=Q(a);e=U(d,e);db(a,function(){jb("Cannot call "+a+" due to unbound types",k)},b-1);Ua([],k,function(h){var l=a,m=a;h=[h[0],null].concat(h.slice(1));var n=e,q=h.length;2> +q&&R("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var y=null!==h[1]&&!1,z=!1,p=1;p>>h}}var l=-1!=b.indexOf("unsigned");P(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+$a(n)+'" to '+this.name);if(ne)throw new TypeError('Passing a number "'+$a(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+e+"]!");return l?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:kb(b,k,0!==d),da:null})},j:function(a,b, +c){function d(g){g>>=2;var k=I;return new e(F,k[g+1],k[g])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=Q(c);P(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{pa:!0})},w:function(a,b){b=Q(b);var c="std::string"===b;P(a,{name:b,fromWireType:function(d){var e=I[d>>2];if(c)for(var g=d+4,k=0;k<=e;++k){var h=d+4+k;if(k==e||0==C[h]){g=ia(g,h-g);if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=h+1}}else{l=Array(e); +for(k=0;k=q&&(q=65536+((q&1023)<<10)|e.charCodeAt(++n)&1023);127>=q?++m:m=2047>=q?m+2:65535>=q?m+3:m+4}return m}: +function(){return e.length})(),h=sb(4+k+1);I[h>>2]=k;if(c&&g)ja(e,h+4,k+1);else if(g)for(g=0;g>2],n=k(),q,y=l+4,z=0;z<=m;++z){var p=l+4+z*b;if(z==m||0==n[p>>h])y=d(y,p-y),void 0===q?q=y:(q+=String.fromCharCode(0),q+=y),y=p+b}V(l);return q},toWireType:function(l,m){"string"!==typeof m&&R("Cannot pass non-string to C++ string type "+c);var n=g(m),q=sb(4+n+b);I[q>>2]=n>>h;e(m,q+4,n+b);null!==l&&l.push(V,q);return q},argPackAdvance:8,readValueFromPointer:Oa,da:function(l){V(l)}})},R:function(a,b,c,d,e,g){Ma[a]={name:Q(b),ra:U(c,d),sa:U(e,g),ha:[]}},P:function(a, +b,c,d,e,g,k,h,l,m){Ma[a].ha.push({ka:Q(b),oa:c,ma:U(d,e),na:g,za:k,ya:U(h,l),Aa:m})},M:function(a,b){b=Q(b);P(a,{Da:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},n:Za,z:function(a){if(0===a)return T(mb());var b=lb[a];a=void 0===b?Q(a):b;return T(mb()[a])},N:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",k+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(nb,f,T);ob[b]=e}return e(a,c,d)},y:function(a,b){a=nb(a,"_emval_take_value");a=a.readValueFromPointer(b); +return T(a)},f:function(){x()},h:function(a,b){W(a,b||1);throw"longjmp";},D:function(a,b,c){C.copyWithin(a,b,b+c)},l:function(a){a>>>=0;var b=C.length;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>>16);va(B.buffer);var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},u:function(){return 0},G:function(a,b,c,d){a=La.Ca(a);b=La.Ba(a,b,c);E[d>> +2]=b;return 0},B:function(){},t:function(a,b,c,d){for(var e=0,g=0;g>2],h=E[b+(8*g+4)>>2],l=0;l>2]=e;return 0},d:function(){return ea|0},i:function(a){var b=Date.now();E[a>>2]=b/1E3|0;E[a+4>>2]=b%1E3*1E3|0;return 0},m:tb,g:ub,r:vb,q:wb,o:xb,e:yb,C:zb,a:B,c:function(a){ea=a|0},F:function(a){switch(a){case 30:return 16384; +case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1; +case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256; +case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}E[Ab()>>2]=28;return-1}}; +(function(){function a(e){f.asm=e.exports;J=f.asm.S;K--;f.monitorRunDependencies&&f.monitorRunDependencies(K);0==K&&(null!==Ca&&(clearInterval(Ca),Ca=null),L&&(e=L,L=null,e()))}function b(e){a(e.instance)}function c(e){return Ga().then(function(g){return WebAssembly.instantiate(g,d)}).then(e,function(g){v("failed to asynchronously prepare wasm: "+g);x(g)})}var d={a:Bb};K++;f.monitorRunDependencies&&f.monitorRunDependencies(K);if(f.instantiateWasm)try{return f.instantiateWasm(d,a)}catch(e){return v("Module.instantiateWasm callback failed with error: "+ +e),!1}(function(){return w||"function"!==typeof WebAssembly.instantiateStreaming||Da()||"function"!==typeof fetch?c(b):fetch(M,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(g){v("wasm streaming compile failed: "+g);v("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})(); +var rb=f.___wasm_call_ctors=function(){return(rb=f.___wasm_call_ctors=f.asm.T).apply(null,arguments)},V=f._free=function(){return(V=f._free=f.asm.U).apply(null,arguments)},sb=f._malloc=function(){return(sb=f._malloc=f.asm.V).apply(null,arguments)},ib=f.___getTypeName=function(){return(ib=f.___getTypeName=f.asm.W).apply(null,arguments)};f.___embind_register_native_and_builtin_types=function(){return(f.___embind_register_native_and_builtin_types=f.asm.X).apply(null,arguments)}; +var Ab=f.___errno_location=function(){return(Ab=f.___errno_location=f.asm.Y).apply(null,arguments)},X=f.stackSave=function(){return(X=f.stackSave=f.asm.Z).apply(null,arguments)},Y=f.stackRestore=function(){return(Y=f.stackRestore=f.asm._).apply(null,arguments)},W=f._setThrew=function(){return(W=f._setThrew=f.asm.$).apply(null,arguments)};f.dynCall_jiiii=function(){return(f.dynCall_jiiii=f.asm.aa).apply(null,arguments)};f.dynCall_jiji=function(){return(f.dynCall_jiji=f.asm.ba).apply(null,arguments)}; +function yb(a,b,c){var d=X();try{J.get(a)(b,c)}catch(e){Y(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}}function xb(a,b){var c=X();try{J.get(a)(b)}catch(d){Y(c);if(d!==d+0&&"longjmp"!==d)throw d;W(1,0)}}function vb(a,b,c,d){var e=X();try{return J.get(a)(b,c,d)}catch(g){Y(e);if(g!==g+0&&"longjmp"!==g)throw g;W(1,0)}}function ub(a,b,c){var d=X();try{return J.get(a)(b,c)}catch(e){Y(d);if(e!==e+0&&"longjmp"!==e)throw e;W(1,0)}} +function tb(a,b){var c=X();try{return J.get(a)(b)}catch(d){Y(c);if(d!==d+0&&"longjmp"!==d)throw d;W(1,0)}}function wb(a,b,c,d,e,g){var k=X();try{return J.get(a)(b,c,d,e,g)}catch(h){Y(k);if(h!==h+0&&"longjmp"!==h)throw h;W(1,0)}}function zb(a,b,c,d,e){var g=X();try{J.get(a)(b,c,d,e)}catch(k){Y(g);if(k!==k+0&&"longjmp"!==k)throw k;W(1,0)}}var Cb;L=function Db(){Cb||Eb();Cb||(L=Db)}; +function Eb(){function a(){if(!Cb&&(Cb=!0,f.calledRun=!0,!fa)){Ha(ya);Ha(za);aa(f);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"==typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var b=f.postRun.shift();Aa.unshift(b)}Ha(Aa)}}if(!(0 workerBridge.basisEncode(signal, imageData, options); +) { + return workerBridge.basisEncode(signal, imageData, options); +} interface Props { options: EncodeOptions; @@ -23,89 +29,53 @@ interface Props { } interface State { - options: EncodeOptions; showAdvanced: boolean; } export class Options extends Component { - static getDerivedStateFromProps( - props: Props, - state: State, - ): Partial | null { - if (state.options && shallowEqual(state.options, props.options)) { - return null; - } - - const { options } = props; - - return { - options, - }; - } - - // The rest of the defaults are set in getDerivedStateFromProps state: State = { showAdvanced: false, - } as State; - - private _inputChangeCallbacks = new Map void>(); - - private _inputChange = ( - prop: keyof State, - type: 'number' | 'boolean' | 'string', - ) => { - // Cache the callback for performance - if (!this._inputChangeCallbacks.has(prop)) { - this._inputChangeCallbacks.set(prop, (event: Event) => { - const formEl = event.target as HTMLInputElement | HTMLSelectElement; - const newVal = - type === 'boolean' - ? 'checked' in formEl - ? formEl.checked - : !!formEl.value - : type === 'number' - ? Number(formEl.value) - : formEl.value; - - const newState: Partial = { - [prop]: newVal, - }; - - const optionState = { - ...this.state, - ...newState, - }; - - const newOptions: EncodeOptions = {}; - - // Updating options, so we don't recalculate in getDerivedStateFromProps. - newState.options = newOptions; - - this.setState( - // It isn't clear to me why I have to cast this :) - newState as State, - ); - - this.props.onChange(newOptions); - }); - } - - return this._inputChangeCallbacks.get(prop)!; }; - render(_: Props, {}: State) { + onChange = (event: Event) => { + const form = (event.currentTarget as HTMLInputElement).closest( + 'form', + ) as HTMLFormElement; + const { options } = this.props; + + const newOptions: EncodeOptions = { + // Copy over options the form doesn't currently care about, eg arithmetic + ...this.props.options, + // .value + quality: inputFieldValueAsNumber(form.quality, options.quality), + }; + this.props.onChange(newOptions); + }; + + render({ options }: Props, { showAdvanced }: State) { + // I'm rendering both lossy and lossless forms, as it becomes much easier when + // gathering the data. return (
Quality:
+ + {showAdvanced ?
Nothing here yet
: null}
); } diff --git a/src/features/encoders/basis/shared/meta.ts b/src/features/encoders/basis/shared/meta.ts index 7f640f15..b044d41a 100644 --- a/src/features/encoders/basis/shared/meta.ts +++ b/src/features/encoders/basis/shared/meta.ts @@ -17,4 +17,6 @@ export { EncodeOptions }; export const label = 'Basis'; export const mimeType = 'image/basisu'; export const extension = 'basis'; -export const defaultOptions: EncodeOptions = {}; +export const defaultOptions: EncodeOptions = { + quality: 2, +};