diff --git a/codecs/avif/enc/avif_enc_mt.d.ts b/codecs/avif/enc/avif_enc_mt.d.ts index 8aa887fe..30526c5e 100644 --- a/codecs/avif/enc/avif_enc_mt.d.ts +++ b/codecs/avif/enc/avif_enc_mt.d.ts @@ -1,2 +1 @@ -export * from './avif_enc'; export { default } from './avif_enc'; diff --git a/codecs/wp2/Makefile b/codecs/wp2/Makefile index 06013b62..d6478b0e 100644 --- a/codecs/wp2/Makefile +++ b/codecs/wp2/Makefile @@ -1,20 +1,30 @@ CODEC_URL = https://chromium.googlesource.com/codecs/libwebp2/+archive/c90b5b476004c9a98731ae1c175cebab5de50fbf.tar.gz CODEC_DIR = node_modules/wp2 -CODEC_BUILD_DIR := $(CODEC_DIR)/.build -CODEC_OUT := $(CODEC_BUILD_DIR)/libwebp2.a +CODEC_BUILD_ROOT := $(CODEC_DIR)/build +CODEC_BASELINE_BUILD_DIR := $(CODEC_BUILD_ROOT)/baseline +CODEC_MT_BUILD_DIR := $(CODEC_BUILD_ROOT)/mt +CODEC_MT_SIMD_BUILD_DIR := $(CODEC_BUILD_ROOT)/mt-simd -OUT_JS = enc/wp2_enc.js dec/wp2_dec.js -OUT_WASM = $(OUT_JS:.js=.wasm) +OUT_JS = enc/wp2_enc.js enc/wp2_enc_mt.js enc/wp2_enc_mt_simd.js dec/wp2_dec.js +OUT_WASM := $(OUT_JS:.js=.wasm) +OUT_WORKER := $(OUT_JS:.js=.worker.js) .PHONY: all clean all: $(OUT_JS) -%.js: %.cpp $(CODEC_OUT) - $(CXX) \ - -I $(CODEC_DIR) \ - ${CXXFLAGS} \ - ${LDFLAGS} \ +# Define dependencies for all variations of build artifacts. +$(filter enc/%,$(OUT_JS)): enc/wp2_enc.o +$(filter dec/%,$(OUT_JS)): dec/wp2_dec.o +enc/wp2_enc.js dec/wp2_dec.js: $(CODEC_BASELINE_BUILD_DIR)/libwebp2.a +enc/wp2_enc_mt.js: $(CODEC_MT_BUILD_DIR)/libwebp2.a +enc/wp2_enc_mt_simd.js: $(CODEC_MT_SIMD_BUILD_DIR)/libwebp2.a +# Link multithreaded builds with -pthread. +enc/wp2_enc_mt.js enc/wp2_enc_mt_simd.js: LDFLAGS+=-pthread + +$(OUT_JS): + $(LD) \ + $(LDFLAGS) \ --bind \ --closure 1 \ -s ALLOW_MEMORY_GROWTH=1 \ @@ -26,25 +36,43 @@ all: $(OUT_JS) -o $@ \ $+ -$(CODEC_OUT): $(CODEC_BUILD_DIR)/Makefile - cd $(CODEC_BUILD_DIR) && \ - $(MAKE) +%.o: %.cpp $(CODEC_DIR)/CMakeLists.txt + $(CXX) \ + $(CXXFLAGS) \ + -I $(CODEC_DIR) \ + -o $@ \ + $< -$(CODEC_BUILD_DIR)/Makefile: $(CODEC_DIR)/CMakeLists.txt - mkdir -p $(CODEC_BUILD_DIR) - cd $(CODEC_BUILD_DIR) && \ +%/libwebp2.a: %/Makefile + $(MAKE) -C $(@D) + +# Disable SIMD for non-SIMD builds. +$(CODEC_BASELINE_BUILD_DIR)/Makefile $(CODEC_MT_BUILD_DIR)/Makefile: CMAKE_FLAGS+=-DWP2_ENABLE_SIMD=0 + +# Disable threads for the single-threaded build. +$(CODEC_BASELINE_BUILD_DIR)/Makefile: CMAKE_FLAGS+=-DCMAKE_DISABLE_FIND_PACKAGE_Threads=1 + +# The line below should be unnecessary in the future. +# See https://github.com/emscripten-core/emscripten/issues/12714 for -msimd128. +# See https://github.com/emscripten-core/emscripten/issues/12746 for -msse4.2. +$(CODEC_MT_SIMD_BUILD_DIR)/Makefile: CXXFLAGS+=-msimd128 -msse4.2 + +%/Makefile: $(CODEC_DIR)/CMakeLists.txt emcmake cmake \ - -DWP2_ENABLE_SIMD=0 \ + $(CMAKE_FLAGS) \ -DWP2_BUILD_TESTS=0 \ -DWP2_ENABLE_TESTS=0 \ -DWP2_BUILD_EXAMPLES=0 \ -DWP2_BUILD_EXTRAS=0 \ - ../ + -B $(@D) \ + $(= g) { - var l = a.charCodeAt(++f); - g = (65536 + ((g & 1023) << 10)) | (l & 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 ia = new TextDecoder('utf-16le'); - function ja(a, b) { - var c = a >> 1; - for (b = c + b / 2; !(c >= b) && B[c]; ) ++c; - return ia.decode(A.subarray(a, c << 1)); - } - function ka(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 f = 0; f < c; ++f) (D[b >> 1] = a.charCodeAt(f)), (b += 2); - D[b >> 1] = 0; - return b - d; - } - function la(a) { - return 2 * a.length; - } - function ma(a, b) { - for (var c = 0, d = ''; !(c >= b / 4); ) { - var f = E[(a + 4 * c) >> 2]; - if (0 == f) break; - ++c; - 65536 <= f - ? ((f -= 65536), - (d += String.fromCharCode(55296 | (f >> 10), 56320 | (f & 1023)))) - : (d += String.fromCharCode(f)); - } - return d; - } - function na(a, b, c) { - void 0 === c && (c = 2147483647); - if (4 > c) return 0; - var d = b; - c = d + c - 4; - for (var f = 0; f < a.length; ++f) { - var g = a.charCodeAt(f); - if (55296 <= g && 57343 >= g) { - var l = a.charCodeAt(++f); - g = (65536 + ((g & 1023) << 10)) | (l & 1023); - } - E[b >> 2] = g; - b += 4; - if (b + 4 > c) break; - } - E[b >> 2] = 0; - return b - d; - } - function oa(a) { - for (var b = 0, c = 0; c < a.length; ++c) { - var d = a.charCodeAt(c); - 55296 <= d && 57343 >= d && ++c; - b += 4; - } - return b; - } - var F, G, A, D, B, E, H, pa, qa; - function ra(a) { - F = a; - e.HEAP8 = G = new Int8Array(a); - e.HEAP16 = D = new Int16Array(a); - e.HEAP32 = E = new Int32Array(a); - e.HEAPU8 = A = new Uint8Array(a); - e.HEAPU16 = B = new Uint16Array(a); - e.HEAPU32 = H = new Uint32Array(a); - e.HEAPF32 = pa = new Float32Array(a); - e.HEAPF64 = qa = new Float64Array(a); - } - var sa = e.INITIAL_MEMORY || 16777216; - e.wasmMemory - ? (z = e.wasmMemory) - : (z = new WebAssembly.Memory({ initial: sa / 65536, maximum: 32768 })); - z && (F = z.buffer); - sa = F.byteLength; - ra(F); - var J, - ta = [], - ua = [], - va = [], - wa = []; - function xa() { - var a = e.preRun.shift(); - ta.unshift(a); - } - var K = 0, - ya = null, - L = null; - e.preloadedImages = {}; - e.preloadedAudios = {}; - function y(a) { - if (e.onAbort) e.onAbort(a); - v(a); - ea = !0; - a = new WebAssembly.RuntimeError( - 'abort(' + a + '). Build with -s ASSERTIONS=1 for more info.', - ); - ba(a); - throw a; - } - function za() { - var a = N; - return String.prototype.startsWith - ? a.startsWith('data:application/octet-stream;base64,') - : 0 === a.indexOf('data:application/octet-stream;base64,'); - } - var N = 'wp2_dec.wasm'; - if (!za()) { - var Aa = N; - N = e.locateFile ? e.locateFile(Aa, u) : u + Aa; - } - function Ba() { - try { - if (w) return new Uint8Array(w); - if (ca) return ca(N); - throw 'both async and sync fetching of the wasm failed'; - } catch (a) { - y(a); - } - } - function Ca() { - return w || 'function' !== typeof fetch - ? Promise.resolve().then(Ba) - : 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 Ba(); - }); - } - function O(a) { - for (; 0 < a.length; ) { - var b = a.shift(); - if ('function' == typeof b) b(e); - else { - var c = b.P; - 'number' === typeof c - ? void 0 === b.L - ? J.get(c)() - : J.get(c)(b.L) - : c(void 0 === b.L ? null : b.L); - } - } - } - function Da(a) { - this.K = a - 16; - this.X = function (b) { - E[(this.K + 8) >> 2] = b; - }; - this.U = function (b) { - E[(this.K + 0) >> 2] = b; - }; - this.V = function () { - E[(this.K + 4) >> 2] = 0; - }; - this.T = function () { - G[(this.K + 12) >> 0] = 0; - }; - this.W = function () { - G[(this.K + 13) >> 0] = 0; - }; - this.S = function (b, c) { - this.X(b); - this.U(c); - this.V(); - this.T(); - this.W(); - }; - } - function P() { - return 0 < P.N; - } - function Ea(a) { - switch (a) { - case 1: - return 0; - case 2: - return 1; - case 4: - return 2; - case 8: - return 3; - default: - throw new TypeError('Unknown type size: ' + a); - } - } - var Fa = void 0; - function Q(a) { - for (var b = ''; A[a]; ) b += Fa[A[a++]]; - return b; - } - var R = {}, - S = {}, - T = {}; - function Ga(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 Ha(a, b) { - a = Ga(a); - return new Function( - 'body', - 'return function ' + - a + - '() {\n "use strict"; return body.apply(this, arguments);\n};\n', - )(b); - } - function Ia(a) { - var b = Error, - c = Ha(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 Ja = void 0; - function U(a) { - throw new Ja(a); - } - var Ka = void 0; - function La(a, b) { - function c(h) { - h = b(h); - if (h.length !== d.length) - throw new Ka('Mismatched type converter count'); - for (var p = 0; p < d.length; ++p) V(d[p], h[p]); - } - var d = []; - d.forEach(function (h) { - T[h] = a; - }); - var f = Array(a.length), - g = [], - l = 0; - a.forEach(function (h, p) { - S.hasOwnProperty(h) - ? (f[p] = S[h]) - : (g.push(h), - R.hasOwnProperty(h) || (R[h] = []), - R[h].push(function () { - f[p] = S[h]; - ++l; - l === g.length && c(f); - })); - }); - 0 === g.length && c(f); - } - function V(a, b, c) { - c = c || {}; - if (!('argPackAdvance' in b)) - throw new TypeError( - 'registerType registeredInstance requires argPackAdvance', - ); - var d = b.name; - a || U('type "' + d + '" must have a positive integer typeid pointer'); - if (S.hasOwnProperty(a)) { - if (c.R) return; - U("Cannot register type '" + d + "' twice"); - } - S[a] = b; - delete T[a]; - R.hasOwnProperty(a) && - ((b = R[a]), - delete R[a], - b.forEach(function (f) { - f(); - })); - } - var Oa = [], - W = [ - {}, - { value: void 0 }, - { value: null }, - { value: !0 }, - { value: !1 }, - ]; - function Pa(a) { - 4 < a && 0 === --W[a].M && ((W[a] = void 0), Oa.push(a)); - } - function X(a) { - switch (a) { - case void 0: - return 1; - case null: - return 2; - case !0: - return 3; - case !1: - return 4; - default: - var b = Oa.length ? Oa.pop() : W.length; - W[b] = { M: 1, value: a }; - return b; - } - } - function Qa(a) { - return this.fromWireType(H[a >> 2]); - } - function Ra(a) { - if (null === a) return 'null'; - var b = typeof a; - return 'object' === b || 'array' === b || 'function' === b - ? a.toString() - : '' + a; - } - function Sa(a, b) { - switch (b) { - case 2: - return function (c) { - return this.fromWireType(pa[c >> 2]); - }; - case 3: - return function (c) { - return this.fromWireType(qa[c >> 3]); - }; - default: - throw new TypeError('Unknown float type: ' + a); - } - } - function Ta(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 = Ha(b.name || 'unknownFunctionName', function () {}); - c.prototype = b.prototype; - c = new c(); - a = b.apply(c, a); - return a instanceof Object ? a : c; - } - function Ua(a) { - for (; a.length; ) { - var b = a.pop(); - a.pop()(b); - } - } - function Va(a, b) { - var c = e; - if (void 0 === c[a].I) { - var d = c[a]; - c[a] = function () { - c[a].I.hasOwnProperty(arguments.length) || - U( - "Function '" + - b + - "' called with an invalid number of arguments (" + - arguments.length + - ') - expects one of (' + - c[a].I + - ')!', - ); - return c[a].I[arguments.length].apply(this, arguments); - }; - c[a].I = []; - c[a].I[d.O] = d; - } - } - function Wa(a, b, c) { - e.hasOwnProperty(a) - ? ((void 0 === c || (void 0 !== e[a].I && void 0 !== e[a].I[c])) && - U("Cannot register public name '" + a + "' twice"), - Va(a, a), - e.hasOwnProperty(c) && - U( - 'Cannot register multiple overloads of a function with the same number of arguments (' + - c + - ')!', - ), - (e[a].I[c] = b)) - : ((e[a] = b), void 0 !== c && (e[a].Z = c)); - } - function Xa(a, b) { - for (var c = [], d = 0; d < a; d++) c.push(E[(b >> 2) + d]); - return c; - } - function Ya(a, b) { - 0 <= a.indexOf('j') || - y('Assertion failed: getDynCaller should only be called with i64 sigs'); - var c = []; - return function () { - c.length = arguments.length; - for (var d = 0; d < arguments.length; d++) c[d] = arguments[d]; - var f; - -1 != a.indexOf('j') - ? (f = - c && c.length - ? e['dynCall_' + a].apply(null, [b].concat(c)) - : e['dynCall_' + a].call(null, b)) - : (f = J.get(b).apply(null, c)); - return f; - }; - } - function Za(a, b) { - a = Q(a); - var c = -1 != a.indexOf('j') ? Ya(a, b) : J.get(b); - 'function' !== typeof c && - U('unknown function pointer with signature ' + a + ': ' + b); - return c; - } - var $a = void 0; - function ab(a) { - a = bb(a); - var b = Q(a); - Y(a); - return b; - } - function cb(a, b) { - function c(g) { - f[g] || S[g] || (T[g] ? T[g].forEach(c) : (d.push(g), (f[g] = !0))); - } - var d = [], - f = {}; - b.forEach(c); - throw new $a(a + ': ' + d.map(ab).join([', '])); - } - function db(a, b, c) { - switch (b) { - case 0: - return c - ? function (d) { - return G[d]; - } - : function (d) { - return A[d]; - }; - case 1: - return c - ? function (d) { - return D[d >> 1]; - } - : function (d) { - return B[d >> 1]; - }; - case 2: - return c - ? function (d) { - return E[d >> 2]; - } - : function (d) { - return H[d >> 2]; - }; - default: - throw new TypeError('Unknown integer type: ' + a); - } - } - var eb = {}; - function fb() { - return 'object' === typeof globalThis - ? globalThis - : Function('return this')(); - } - function gb(a, b) { - var c = S[a]; - void 0 === c && U(b + ' has unknown type ' + ab(a)); - return c; - } - for (var hb = {}, ib = [null, [], []], jb = Array(256), Z = 0; 256 > Z; ++Z) - jb[Z] = String.fromCharCode(Z); - Fa = jb; - Ja = e.BindingError = Ia('BindingError'); - Ka = e.InternalError = Ia('InternalError'); - e.count_emval_handles = function () { - for (var a = 0, b = 5; b < W.length; ++b) void 0 !== W[b] && ++a; - return a; - }; - e.get_first_emval = function () { - for (var a = 5; a < W.length; ++a) if (void 0 !== W[a]) return W[a]; - return null; - }; - $a = e.UnboundTypeError = Ia('UnboundTypeError'); - ua.push({ - P: function () { - kb(); - }, - }); - var mb = { - s: function (a) { - return lb(a + 16) + 16; - }, - g: function () {}, - r: function (a, b, c) { - new Da(a).S(b, c); - 'uncaught_exception' in P ? P.N++ : (P.N = 1); - throw a; - }, - x: function (a, b, c, d, f) { - var g = Ea(c); - b = Q(b); - V(a, { - name: b, - fromWireType: function (l) { - return !!l; - }, - toWireType: function (l, h) { - return h ? d : f; - }, - argPackAdvance: 8, - readValueFromPointer: function (l) { - if (1 === c) var h = G; - else if (2 === c) h = D; - else if (4 === c) h = E; - else throw new TypeError('Unknown boolean type size: ' + b); - return this.fromWireType(h[l >> g]); - }, - J: null, - }); - }, - w: function (a, b) { - b = Q(b); - V(a, { - name: b, - fromWireType: function (c) { - var d = W[c].value; - Pa(c); - return d; - }, - toWireType: function (c, d) { - return X(d); - }, - argPackAdvance: 8, - readValueFromPointer: Qa, - J: null, - }); - }, - m: function (a, b, c) { - c = Ea(c); - b = Q(b); - V(a, { - name: b, - fromWireType: function (d) { - return d; - }, - toWireType: function (d, f) { - if ('number' !== typeof f && 'boolean' !== typeof f) - throw new TypeError( - 'Cannot convert "' + Ra(f) + '" to ' + this.name, - ); - return f; - }, - argPackAdvance: 8, - readValueFromPointer: Sa(b, c), - J: null, - }); - }, - t: function (a, b, c, d, f, g) { - var l = Xa(b, c); - a = Q(a); - f = Za(d, f); - Wa( - a, - function () { - cb('Cannot call ' + a + ' due to unbound types', l); - }, - b - 1, - ); - La(l, function (h) { - var p = a, - k = a; - h = [h[0], null].concat(h.slice(1)); - var m = f, - q = h.length; - 2 > q && - U( - "argTypes array size mismatch! Must at least get return value and 'this' types!", - ); - for (var x = null !== h[1] && !1, C = !1, n = 1; n < h.length; ++n) - if (null !== h[n] && void 0 === h[n].J) { - C = !0; - break; - } - var Ma = 'void' !== h[0].name, - I = '', - M = ''; - for (n = 0; n < q - 2; ++n) - (I += (0 !== n ? ', ' : '') + 'arg' + n), - (M += (0 !== n ? ', ' : '') + 'arg' + n + 'Wired'); - k = - 'return function ' + - Ga(k) + - '(' + - I + - ') {\nif (arguments.length !== ' + - (q - 2) + - ") {\nthrowBindingError('function " + - k + - " called with ' + arguments.length + ' arguments, expected " + - (q - 2) + - " args!');\n}\n"; - C && (k += 'var destructors = [];\n'); - var Na = C ? 'destructors' : 'null'; - I = 'throwBindingError invoker fn runDestructors retType classParam'.split( - ' ', - ); - m = [U, m, g, Ua, h[0], h[1]]; - x && - (k += 'var thisWired = classParam.toWireType(' + Na + ', this);\n'); - for (n = 0; n < q - 2; ++n) - (k += - 'var arg' + - n + - 'Wired = argType' + - n + - '.toWireType(' + - Na + - ', arg' + - n + - '); // ' + - h[n + 2].name + - '\n'), - I.push('argType' + n), - m.push(h[n + 2]); - x && (M = 'thisWired' + (0 < M.length ? ', ' : '') + M); - k += - (Ma ? 'var rv = ' : '') + - 'invoker(fn' + - (0 < M.length ? ', ' : '') + - M + - ');\n'; - if (C) k += 'runDestructors(destructors);\n'; - else - for (n = x ? 1 : 2; n < h.length; ++n) - (q = 1 === n ? 'thisWired' : 'arg' + (n - 2) + 'Wired'), - null !== h[n].J && - ((k += q + '_dtor(' + q + '); // ' + h[n].name + '\n'), - I.push(q + '_dtor'), - m.push(h[n].J)); - Ma && (k += 'var ret = retType.fromWireType(rv);\nreturn ret;\n'); - I.push(k + '}\n'); - h = Ta(I).apply(null, m); - n = b - 1; - if (!e.hasOwnProperty(p)) - throw new Ka('Replacing nonexistant public symbol'); - void 0 !== e[p].I && void 0 !== n - ? (e[p].I[n] = h) - : ((e[p] = h), (e[p].O = n)); - return []; - }); - }, - c: function (a, b, c, d, f) { - function g(k) { - return k; - } - b = Q(b); - -1 === f && (f = 4294967295); - var l = Ea(c); - if (0 === d) { - var h = 32 - 8 * c; - g = function (k) { - return (k << h) >>> h; - }; - } - var p = -1 != b.indexOf('unsigned'); - V(a, { - name: b, - fromWireType: g, - toWireType: function (k, m) { - if ('number' !== typeof m && 'boolean' !== typeof m) - throw new TypeError( - 'Cannot convert "' + Ra(m) + '" to ' + this.name, - ); - if (m < d || m > f) - throw new TypeError( - 'Passing a number "' + - Ra(m) + - '" from JS side to C/C++ side to an argument of type "' + - b + - '", which is outside the valid range [' + - d + - ', ' + - f + - ']!', - ); - return p ? m >>> 0 : m | 0; - }, - argPackAdvance: 8, - readValueFromPointer: db(b, l, 0 !== d), - J: null, - }); - }, - b: function (a, b, c) { - function d(g) { - g >>= 2; - var l = H; - return new f(F, l[g + 1], l[g]); - } - var f = [ - Int8Array, - Uint8Array, - Int16Array, - Uint16Array, - Int32Array, - Uint32Array, - Float32Array, - Float64Array, - ][b]; - c = Q(c); - V( - a, - { - name: c, - fromWireType: d, - argPackAdvance: 8, - readValueFromPointer: d, - }, - { R: !0 }, - ); - }, - n: function (a, b) { - b = Q(b); - var c = 'std::string' === b; - V(a, { - name: b, - fromWireType: function (d) { - var f = H[d >> 2]; - if (c) - for (var g = d + 4, l = 0; l <= f; ++l) { - var h = d + 4 + l; - if (l == f || 0 == A[h]) { - if (g) { - for (var p = g + (h - g), k = g; !(k >= p) && A[k]; ) ++k; - g = fa.decode(A.subarray(g, k)); - } else g = ''; - if (void 0 === m) var m = g; - else (m += String.fromCharCode(0)), (m += g); - g = h + 1; - } - } - else { - m = Array(f); - for (l = 0; l < f; ++l) m[l] = String.fromCharCode(A[d + 4 + l]); - m = m.join(''); - } - Y(d); - return m; - }, - toWireType: function (d, f) { - f instanceof ArrayBuffer && (f = new Uint8Array(f)); - var g = 'string' === typeof f; - g || - f instanceof Uint8Array || - f instanceof Uint8ClampedArray || - f instanceof Int8Array || - U('Cannot pass non-string to std::string'); - var l = (c && g - ? function () { - for (var k = 0, m = 0; m < f.length; ++m) { - var q = f.charCodeAt(m); - 55296 <= q && - 57343 >= q && - (q = - (65536 + ((q & 1023) << 10)) | - (f.charCodeAt(++m) & 1023)); - 127 >= q - ? ++k - : (k = 2047 >= q ? k + 2 : 65535 >= q ? k + 3 : k + 4); - } - return k; - } - : function () { - return f.length; - })(), - h = lb(4 + l + 1); - H[h >> 2] = l; - if (c && g) ha(f, h + 4, l + 1); - else if (g) - for (g = 0; g < l; ++g) { - var p = f.charCodeAt(g); - 255 < p && - (Y(h), - U('String has UTF-16 code units that do not fit in 8 bits')); - A[h + 4 + g] = p; - } - else for (g = 0; g < l; ++g) A[h + 4 + g] = f[g]; - null !== d && d.push(Y, h); - return h; - }, - argPackAdvance: 8, - readValueFromPointer: Qa, - J: function (d) { - Y(d); - }, - }); - }, - h: function (a, b, c) { - c = Q(c); - if (2 === b) { - var d = ja; - var f = ka; - var g = la; - var l = function () { - return B; - }; - var h = 1; - } else - 4 === b && - ((d = ma), - (f = na), - (g = oa), - (l = function () { - return H; - }), - (h = 2)); - V(a, { - name: c, - fromWireType: function (p) { - for (var k = H[p >> 2], m = l(), q, x = p + 4, C = 0; C <= k; ++C) { - var n = p + 4 + C * b; - if (C == k || 0 == m[n >> h]) - (x = d(x, n - x)), - void 0 === q - ? (q = x) - : ((q += String.fromCharCode(0)), (q += x)), - (x = n + b); - } - Y(p); - return q; - }, - toWireType: function (p, k) { - 'string' !== typeof k && - U('Cannot pass non-string to C++ string type ' + c); - var m = g(k), - q = lb(4 + m + b); - H[q >> 2] = m >> h; - f(k, q + 4, m + b); - null !== p && p.push(Y, q); - return q; - }, - argPackAdvance: 8, - readValueFromPointer: Qa, - J: function (p) { - Y(p); - }, - }); - }, - y: function (a, b) { - b = Q(b); - V(a, { - Y: !0, - name: b, - argPackAdvance: 0, - fromWireType: function () {}, - toWireType: function () {}, - }); - }, - e: Pa, - f: function (a) { - if (0 === a) return X(fb()); - var b = eb[a]; - a = void 0 === b ? Q(a) : b; - return X(fb()[a]); - }, - i: function (a) { - 4 < a && (W[a].M += 1); - }, - j: function (a, b, c, d) { - a || U('Cannot use deleted val. handle = ' + a); - a = W[a].value; - var f = hb[b]; - if (!f) { - f = ''; - for (var g = 0; g < b; ++g) f += (0 !== g ? ', ' : '') + 'arg' + g; - var l = - 'return function emval_allocator_' + - b + - '(constructor, argTypes, args) {\n'; - for (g = 0; g < b; ++g) - l += - 'var argType' + - g + - " = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + " + - g + - '], "parameter ' + - g + - '");\nvar arg' + - g + - ' = argType' + - g + - '.readValueFromPointer(args);\nargs += argType' + - g + - "['argPackAdvance'];\n"; - f = new Function( - 'requireRegisteredType', - 'Module', - '__emval_register', - l + - ('var obj = new constructor(' + - f + - ');\nreturn __emval_register(obj);\n}\n'), - )(gb, e, X); - hb[b] = f; - } - return f(a, c, d); - }, - k: function () { - y(); - }, - v: function (a, b, c) { - A.copyWithin(a, b, b + c); - }, - d: function (a) { - a >>>= 0; - var b = A.length; - if (2147483648 < a) return !1; - for (var c = 1; 4 >= c; c *= 2) { - var d = b * (1 + 0.2 / c); - d = Math.min(d, a + 100663296); - d = Math.max(16777216, a, d); - 0 < d % 65536 && (d += 65536 - (d % 65536)); - a: { - try { - z.grow((Math.min(2147483648, d) - F.byteLength + 65535) >>> 16); - ra(z.buffer); - var f = 1; - break a; - } catch (g) {} - f = void 0; - } - if (f) return !0; - } - return !1; - }, - l: function (a, b, c, d) { - for (var f = 0, g = 0; g < c; g++) { - for ( - var l = E[(b + 8 * g) >> 2], h = E[(b + (8 * g + 4)) >> 2], p = 0; - p < h; - p++ - ) { - var k = A[l + p], - m = ib[a]; - if (0 === k || 10 === k) { - for (k = 0; m[k] && !(NaN <= k); ) ++k; - k = fa.decode( - m.subarray ? m.subarray(0, k) : new Uint8Array(m.slice(0, k)), - ); - (1 === a ? da : v)(k); - m.length = 0; - } else m.push(k); - } - f += h; - } - E[d >> 2] = f; - return 0; - }, - a: z, - o: function () { - return 0; - }, - q: function () { - return 0; - }, - p: function () {}, - A: function () { - return 6; - }, - z: function () {}, - u: function () {}, - }; - (function () { - function a(f) { - e.asm = f.exports; - J = e.asm.B; - K--; - e.monitorRunDependencies && e.monitorRunDependencies(K); - 0 == K && - (null !== ya && (clearInterval(ya), (ya = null)), - L && ((f = L), (L = null), f())); - } - function b(f) { - a(f.instance); - } - function c(f) { - return Ca() - .then(function (g) { - return WebAssembly.instantiate(g, d); - }) - .then(f, function (g) { - v('failed to asynchronously prepare wasm: ' + g); - y(g); - }); - } - var d = { a: mb }; - K++; - e.monitorRunDependencies && e.monitorRunDependencies(K); - if (e.instantiateWasm) - try { - return e.instantiateWasm(d, a); - } catch (f) { - return ( - v('Module.instantiateWasm callback failed with error: ' + f), !1 - ); - } - (function () { - return w || - 'function' !== typeof WebAssembly.instantiateStreaming || - za() || - 'function' !== typeof fetch - ? c(b) - : fetch(N, { credentials: 'same-origin' }).then(function (f) { - return WebAssembly.instantiateStreaming(f, d).then(b, function ( - g, - ) { - v('wasm streaming compile failed: ' + g); - v('falling back to ArrayBuffer instantiation'); - return c(b); - }); - }); - })().catch(ba); - return {}; - })(); - var kb = (e.___wasm_call_ctors = function () { - return (kb = e.___wasm_call_ctors = e.asm.C).apply(null, arguments); - }), - lb = (e._malloc = function () { - return (lb = e._malloc = e.asm.D).apply(null, arguments); - }), - Y = (e._free = function () { - return (Y = e._free = e.asm.E).apply(null, arguments); - }), - bb = (e.___getTypeName = function () { - return (bb = e.___getTypeName = e.asm.F).apply(null, arguments); - }); - e.___embind_register_native_and_builtin_types = function () { - return (e.___embind_register_native_and_builtin_types = e.asm.G).apply( - null, - arguments, - ); - }; - e.dynCall_jiji = function () { - return (e.dynCall_jiji = e.asm.H).apply(null, arguments); - }; - var nb; - L = function ob() { - nb || pb(); - nb || (L = ob); - }; - function pb() { - function a() { - if (!nb && ((nb = !0), (e.calledRun = !0), !ea)) { - O(ua); - O(va); - aa(e); - if (e.onRuntimeInitialized) e.onRuntimeInitialized(); - if (e.postRun) - for ( - 'function' == typeof e.postRun && (e.postRun = [e.postRun]); - e.postRun.length; - - ) { - var b = e.postRun.shift(); - wa.unshift(b); - } - O(wa); - } - } - if (!(0 < K)) { - if (e.preRun) - for ( - 'function' == typeof e.preRun && (e.preRun = [e.preRun]); - e.preRun.length; - - ) - xa(); - O(ta); - 0 < K || - (e.setStatus - ? (e.setStatus('Running...'), - setTimeout(function () { - setTimeout(function () { - e.setStatus(''); - }, 1); - a(); - }, 1)) - : a()); - } - } - e.run = pb; - if (e.preInit) - for ( - 'function' == typeof e.preInit && (e.preInit = [e.preInit]); - 0 < e.preInit.length; - - ) - e.preInit.pop()(); - noExitRuntime = !0; - pb(); - - return wp2_dec.ready; - }; -})(); -export default wp2_dec; diff --git a/codecs/wp2/dec/wp2_dec.wasm b/codecs/wp2/dec/wp2_dec.wasm deleted file mode 100755 index b3e471ab..00000000 Binary files a/codecs/wp2/dec/wp2_dec.wasm and /dev/null differ diff --git a/codecs/wp2/enc/wp2_enc.cpp b/codecs/wp2/enc/wp2_enc.cpp index 117f6784..9b1ac2b7 100644 --- a/codecs/wp2/enc/wp2_enc.cpp +++ b/codecs/wp2/enc/wp2_enc.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include "src/wp2/encode.h" @@ -42,6 +43,7 @@ val encode(std::string image_in, int image_width, int image_height, WP2Options o } WP2::MemoryWriter memory_writer; + config.thread_level = emscripten_num_logical_cores() - 1; status = WP2::Encode(src, &memory_writer, config); if (status != WP2_STATUS_OK) { return val::null(); diff --git a/codecs/wp2/enc/wp2_enc.js b/codecs/wp2/enc/wp2_enc.js deleted file mode 100644 index 98433ea4..00000000 --- a/codecs/wp2/enc/wp2_enc.js +++ /dev/null @@ -1,1277 +0,0 @@ -var wp2_enc = (function () { - var _scriptDir = import.meta.url; - - return function (wp2_enc) { - wp2_enc = wp2_enc || {}; - - var f; - f || (f = typeof wp2_enc !== 'undefined' ? wp2_enc : {}); - 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 w; - f.wasmBinary && (w = f.wasmBinary); - var noExitRuntime; - f.noExitRuntime && (noExitRuntime = f.noExitRuntime); - 'object' !== typeof WebAssembly && A('no native wasm support detected'); - var B, - ea = !1, - fa = new TextDecoder('utf8'); - function C(a, b) { - if (!a) return ''; - b = a + b; - for (var c = a; !(c >= b) && D[c]; ) ++c; - return fa.decode(D.subarray(a, c)); - } - function ia(a, b, c) { - var d = D; - if (0 < c) { - c = b + c - 1; - for (var e = 0; e < a.length; ++e) { - var g = a.charCodeAt(e); - if (55296 <= g && 57343 >= g) { - var m = a.charCodeAt(++e); - g = (65536 + ((g & 1023) << 10)) | (m & 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 ja = new TextDecoder('utf-16le'); - function ka(a, b) { - var c = a >> 1; - for (b = c + b / 2; !(c >= b) && E[c]; ) ++c; - return ja.decode(D.subarray(a, c << 1)); - } - function la(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 < c; ++e) (G[b >> 1] = a.charCodeAt(e)), (b += 2); - G[b >> 1] = 0; - return b - d; - } - function ma(a) { - return 2 * a.length; - } - function na(a, b) { - for (var c = 0, d = ''; !(c >= b / 4); ) { - var e = H[(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 oa(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 < a.length; ++e) { - var g = a.charCodeAt(e); - if (55296 <= g && 57343 >= g) { - var m = a.charCodeAt(++e); - g = (65536 + ((g & 1023) << 10)) | (m & 1023); - } - H[b >> 2] = g; - b += 4; - if (b + 4 > c) break; - } - H[b >> 2] = 0; - return b - d; - } - function pa(a) { - for (var b = 0, c = 0; c < a.length; ++c) { - var d = a.charCodeAt(c); - 55296 <= d && 57343 >= d && ++c; - b += 4; - } - return b; - } - var I, J, D, G, E, H, K, qa, ra; - function sa(a) { - I = a; - f.HEAP8 = J = new Int8Array(a); - f.HEAP16 = G = new Int16Array(a); - f.HEAP32 = H = new Int32Array(a); - f.HEAPU8 = D = new Uint8Array(a); - f.HEAPU16 = E = new Uint16Array(a); - f.HEAPU32 = K = new Uint32Array(a); - f.HEAPF32 = qa = new Float32Array(a); - f.HEAPF64 = ra = new Float64Array(a); - } - var ta = f.INITIAL_MEMORY || 16777216; - f.wasmMemory - ? (B = f.wasmMemory) - : (B = new WebAssembly.Memory({ initial: ta / 65536, maximum: 32768 })); - B && (I = B.buffer); - ta = I.byteLength; - sa(I); - var L, - ua = [], - va = [], - wa = [], - xa = []; - function ya() { - var a = f.preRun.shift(); - ua.unshift(a); - } - var M = 0, - za = null, - N = null; - f.preloadedImages = {}; - f.preloadedAudios = {}; - function A(a) { - if (f.onAbort) f.onAbort(a); - v(a); - ea = !0; - a = new WebAssembly.RuntimeError( - 'abort(' + a + '). Build with -s ASSERTIONS=1 for more info.', - ); - ba(a); - throw a; - } - function Aa() { - var a = O; - return String.prototype.startsWith - ? a.startsWith('data:application/octet-stream;base64,') - : 0 === a.indexOf('data:application/octet-stream;base64,'); - } - var O = 'wp2_enc.wasm'; - if (!Aa()) { - var Ba = O; - O = f.locateFile ? f.locateFile(Ba, u) : u + Ba; - } - function Ca() { - try { - if (w) return new Uint8Array(w); - if (ca) return ca(O); - throw 'both async and sync fetching of the wasm failed'; - } catch (a) { - A(a); - } - } - function Da() { - return w || 'function' !== typeof fetch - ? Promise.resolve().then(Ca) - : fetch(O, { credentials: 'same-origin' }) - .then(function (a) { - if (!a.ok) throw "failed to load wasm binary file at '" + O + "'"; - return a.arrayBuffer(); - }) - .catch(function () { - return Ca(); - }); - } - function P(a) { - for (; 0 < a.length; ) { - var b = a.shift(); - if ('function' == typeof b) b(f); - else { - var c = b.Y; - 'number' === typeof c - ? void 0 === b.S - ? L.get(c)() - : L.get(c)(b.S) - : c(void 0 === b.S ? null : b.S); - } - } - } - function Ea(a) { - this.R = a - 16; - this.ja = function (b) { - H[(this.R + 8) >> 2] = b; - }; - this.ga = function (b) { - H[(this.R + 0) >> 2] = b; - }; - this.ha = function () { - H[(this.R + 4) >> 2] = 0; - }; - this.fa = function () { - J[(this.R + 12) >> 0] = 0; - }; - this.ia = function () { - J[(this.R + 13) >> 0] = 0; - }; - this.ca = function (b, c) { - this.ja(b); - this.ga(c); - this.ha(); - this.fa(); - this.ia(); - }; - } - function Q() { - return 0 < Q.V; - } - var Fa = {}; - function Ga(a) { - for (; a.length; ) { - var b = a.pop(); - a.pop()(b); - } - } - function Ha(a) { - return this.fromWireType(K[a >> 2]); - } - var R = {}, - S = {}, - Ia = {}; - function Ja(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 Ka(a, b) { - a = Ja(a); - return new Function( - 'body', - 'return function ' + - a + - '() {\n "use strict"; return body.apply(this, arguments);\n};\n', - )(b); - } - function La(a) { - var b = Error, - c = Ka(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 Ma = void 0; - function Na(a, b, c) { - function d(h) { - h = c(h); - if (h.length !== a.length) - throw new Ma('Mismatched type converter count'); - for (var k = 0; k < a.length; ++k) T(a[k], h[k]); - } - a.forEach(function (h) { - Ia[h] = b; - }); - var e = Array(b.length), - g = [], - m = 0; - b.forEach(function (h, k) { - S.hasOwnProperty(h) - ? (e[k] = S[h]) - : (g.push(h), - R.hasOwnProperty(h) || (R[h] = []), - R[h].push(function () { - e[k] = S[h]; - ++m; - m === g.length && d(e); - })); - }); - 0 === g.length && d(e); - } - function Oa(a) { - switch (a) { - case 1: - return 0; - case 2: - return 1; - case 4: - return 2; - case 8: - return 3; - default: - throw new TypeError('Unknown type size: ' + a); - } - } - var Pa = void 0; - function U(a) { - for (var b = ''; D[a]; ) b += Pa[D[a++]]; - return b; - } - var Qa = void 0; - function W(a) { - throw new Qa(a); - } - function T(a, b, c) { - c = c || {}; - if (!('argPackAdvance' in b)) - throw new TypeError( - 'registerType registeredInstance requires argPackAdvance', - ); - var d = b.name; - a || W('type "' + d + '" must have a positive integer typeid pointer'); - if (S.hasOwnProperty(a)) { - if (c.ba) return; - W("Cannot register type '" + d + "' twice"); - } - S[a] = b; - delete Ia[a]; - R.hasOwnProperty(a) && - ((b = R[a]), - delete R[a], - b.forEach(function (e) { - e(); - })); - } - var Ra = [], - X = [ - {}, - { value: void 0 }, - { value: null }, - { value: !0 }, - { value: !1 }, - ]; - function Sa(a) { - 4 < a && 0 === --X[a].T && ((X[a] = void 0), Ra.push(a)); - } - function Ta(a) { - switch (a) { - case void 0: - return 1; - case null: - return 2; - case !0: - return 3; - case !1: - return 4; - default: - var b = Ra.length ? Ra.pop() : X.length; - X[b] = { T: 1, value: a }; - return b; - } - } - function Ua(a) { - if (null === a) return 'null'; - var b = typeof a; - return 'object' === b || 'array' === b || 'function' === b - ? a.toString() - : '' + a; - } - function Va(a, b) { - switch (b) { - case 2: - return function (c) { - return this.fromWireType(qa[c >> 2]); - }; - case 3: - return function (c) { - return this.fromWireType(ra[c >> 3]); - }; - default: - throw new TypeError('Unknown float type: ' + a); - } - } - function Wa(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 = Ka(b.name || 'unknownFunctionName', function () {}); - c.prototype = b.prototype; - c = new c(); - a = b.apply(c, a); - return a instanceof Object ? a : c; - } - function Xa(a, b) { - var c = f; - if (void 0 === c[a].O) { - var d = c[a]; - c[a] = function () { - c[a].O.hasOwnProperty(arguments.length) || - W( - "Function '" + - b + - "' called with an invalid number of arguments (" + - arguments.length + - ') - expects one of (' + - c[a].O + - ')!', - ); - return c[a].O[arguments.length].apply(this, arguments); - }; - c[a].O = []; - c[a].O[d.W] = d; - } - } - function Ya(a, b, c) { - f.hasOwnProperty(a) - ? ((void 0 === c || (void 0 !== f[a].O && void 0 !== f[a].O[c])) && - W("Cannot register public name '" + a + "' twice"), - Xa(a, a), - f.hasOwnProperty(c) && - W( - 'Cannot register multiple overloads of a function with the same number of arguments (' + - c + - ')!', - ), - (f[a].O[c] = b)) - : ((f[a] = b), void 0 !== c && (f[a].oa = c)); - } - function Za(a, b) { - for (var c = [], d = 0; d < a; d++) c.push(H[(b >> 2) + d]); - return c; - } - function $a(a, b) { - 0 <= a.indexOf('j') || - A('Assertion failed: getDynCaller should only be called with i64 sigs'); - var c = []; - return function () { - c.length = arguments.length; - for (var d = 0; d < arguments.length; d++) c[d] = arguments[d]; - var e; - -1 != a.indexOf('j') - ? (e = - c && c.length - ? f['dynCall_' + a].apply(null, [b].concat(c)) - : f['dynCall_' + a].call(null, b)) - : (e = L.get(b).apply(null, c)); - return e; - }; - } - function Y(a, b) { - a = U(a); - var c = -1 != a.indexOf('j') ? $a(a, b) : L.get(b); - 'function' !== typeof c && - W('unknown function pointer with signature ' + a + ': ' + b); - return c; - } - var ab = void 0; - function bb(a) { - a = cb(a); - var b = U(a); - Z(a); - return b; - } - function db(a, b) { - function c(g) { - e[g] || S[g] || (Ia[g] ? Ia[g].forEach(c) : (d.push(g), (e[g] = !0))); - } - var d = [], - e = {}; - b.forEach(c); - throw new ab(a + ': ' + d.map(bb).join([', '])); - } - function eb(a, b, c) { - switch (b) { - case 0: - return c - ? function (d) { - return J[d]; - } - : function (d) { - return D[d]; - }; - case 1: - return c - ? function (d) { - return G[d >> 1]; - } - : function (d) { - return E[d >> 1]; - }; - case 2: - return c - ? function (d) { - return H[d >> 2]; - } - : function (d) { - return K[d >> 2]; - }; - default: - throw new TypeError('Unknown integer type: ' + a); - } - } - var fb = {}; - function gb() { - return 'object' === typeof globalThis - ? globalThis - : Function('return this')(); - } - function hb(a, b) { - var c = S[a]; - void 0 === c && W(b + ' has unknown type ' + bb(a)); - return c; - } - var ib = {}, - jb = [null, [], []]; - Ma = f.InternalError = La('InternalError'); - for (var kb = Array(256), lb = 0; 256 > lb; ++lb) - kb[lb] = String.fromCharCode(lb); - Pa = kb; - Qa = f.BindingError = La('BindingError'); - f.count_emval_handles = function () { - for (var a = 0, b = 5; b < X.length; ++b) void 0 !== X[b] && ++a; - return a; - }; - f.get_first_emval = function () { - for (var a = 5; a < X.length; ++a) if (void 0 !== X[a]) return X[a]; - return null; - }; - ab = f.UnboundTypeError = La('UnboundTypeError'); - va.push({ - Y: function () { - mb(); - }, - }); - var ob = { - t: function (a, b, c, d) { - A( - 'Assertion failed: ' + - C(a) + - ', at: ' + - [b ? C(b) : 'unknown filename', c, d ? C(d) : 'unknown function'], - ); - }, - A: function (a) { - return nb(a + 16) + 16; - }, - G: function () {}, - z: function (a, b, c) { - new Ea(a).ca(b, c); - 'uncaught_exception' in Q ? Q.V++ : (Q.V = 1); - throw a; - }, - o: function (a) { - var b = Fa[a]; - delete Fa[a]; - var c = b.da, - d = b.ea, - e = b.U, - g = e - .map(function (m) { - return m.aa; - }) - .concat( - e.map(function (m) { - return m.la; - }), - ); - Na([a], g, function (m) { - var h = {}; - e.forEach(function (k, l) { - var n = m[l], - q = k.Z, - x = k.$, - y = m[l + e.length], - p = k.ka, - ha = k.ma; - h[k.X] = { - read: function (z) { - return n.fromWireType(q(x, z)); - }, - write: function (z, F) { - var V = []; - p(ha, z, y.toWireType(V, F)); - Ga(V); - }, - }; - }); - return [ - { - name: b.name, - fromWireType: function (k) { - var l = {}, - n; - for (n in h) l[n] = h[n].read(k); - d(k); - return l; - }, - toWireType: function (k, l) { - for (var n in h) - if (!(n in l)) - throw new TypeError('Missing field: "' + n + '"'); - var q = c(); - for (n in h) h[n].write(q, l[n]); - null !== k && k.push(d, q); - return q; - }, - argPackAdvance: 8, - readValueFromPointer: Ha, - P: d, - }, - ]; - }); - }, - x: function (a, b, c, d, e) { - var g = Oa(c); - b = U(b); - T(a, { - name: b, - fromWireType: function (m) { - return !!m; - }, - toWireType: function (m, h) { - return h ? d : e; - }, - argPackAdvance: 8, - readValueFromPointer: function (m) { - if (1 === c) var h = J; - else if (2 === c) h = G; - else if (4 === c) h = H; - else throw new TypeError('Unknown boolean type size: ' + b); - return this.fromWireType(h[m >> g]); - }, - P: null, - }); - }, - w: function (a, b) { - b = U(b); - T(a, { - name: b, - fromWireType: function (c) { - var d = X[c].value; - Sa(c); - return d; - }, - toWireType: function (c, d) { - return Ta(d); - }, - argPackAdvance: 8, - readValueFromPointer: Ha, - P: null, - }); - }, - i: function (a, b, c) { - c = Oa(c); - b = U(b); - T(a, { - name: b, - fromWireType: function (d) { - return d; - }, - toWireType: function (d, e) { - if ('number' !== typeof e && 'boolean' !== typeof e) - throw new TypeError( - 'Cannot convert "' + Ua(e) + '" to ' + this.name, - ); - return e; - }, - argPackAdvance: 8, - readValueFromPointer: Va(b, c), - P: null, - }); - }, - n: function (a, b, c, d, e, g) { - var m = Za(b, c); - a = U(a); - e = Y(d, e); - Ya( - a, - function () { - db('Cannot call ' + a + ' due to unbound types', m); - }, - b - 1, - ); - Na([], m, function (h) { - var k = a, - l = a; - h = [h[0], null].concat(h.slice(1)); - var n = e, - q = h.length; - 2 > q && - W( - "argTypes array size mismatch! Must at least get return value and 'this' types!", - ); - for (var x = null !== h[1] && !1, y = !1, p = 1; p < h.length; ++p) - if (null !== h[p] && void 0 === h[p].P) { - y = !0; - break; - } - var ha = 'void' !== h[0].name, - z = '', - F = ''; - for (p = 0; p < q - 2; ++p) - (z += (0 !== p ? ', ' : '') + 'arg' + p), - (F += (0 !== p ? ', ' : '') + 'arg' + p + 'Wired'); - l = - 'return function ' + - Ja(l) + - '(' + - z + - ') {\nif (arguments.length !== ' + - (q - 2) + - ") {\nthrowBindingError('function " + - l + - " called with ' + arguments.length + ' arguments, expected " + - (q - 2) + - " args!');\n}\n"; - y && (l += 'var destructors = [];\n'); - var V = y ? 'destructors' : 'null'; - z = 'throwBindingError invoker fn runDestructors retType classParam'.split( - ' ', - ); - n = [W, n, g, Ga, h[0], h[1]]; - x && - (l += 'var thisWired = classParam.toWireType(' + V + ', this);\n'); - for (p = 0; p < q - 2; ++p) - (l += - 'var arg' + - p + - 'Wired = argType' + - p + - '.toWireType(' + - V + - ', arg' + - p + - '); // ' + - h[p + 2].name + - '\n'), - z.push('argType' + p), - n.push(h[p + 2]); - x && (F = 'thisWired' + (0 < F.length ? ', ' : '') + F); - l += - (ha ? 'var rv = ' : '') + - 'invoker(fn' + - (0 < F.length ? ', ' : '') + - F + - ');\n'; - if (y) l += 'runDestructors(destructors);\n'; - else - for (p = x ? 1 : 2; p < h.length; ++p) - (q = 1 === p ? 'thisWired' : 'arg' + (p - 2) + 'Wired'), - null !== h[p].P && - ((l += q + '_dtor(' + q + '); // ' + h[p].name + '\n'), - z.push(q + '_dtor'), - n.push(h[p].P)); - ha && (l += 'var ret = retType.fromWireType(rv);\nreturn ret;\n'); - z.push(l + '}\n'); - h = Wa(z).apply(null, n); - p = b - 1; - if (!f.hasOwnProperty(k)) - throw new Ma('Replacing nonexistant public symbol'); - void 0 !== f[k].O && void 0 !== p - ? (f[k].O[p] = h) - : ((f[k] = h), (f[k].W = p)); - return []; - }); - }, - d: function (a, b, c, d, e) { - function g(l) { - return l; - } - b = U(b); - -1 === e && (e = 4294967295); - var m = Oa(c); - if (0 === d) { - var h = 32 - 8 * c; - g = function (l) { - return (l << h) >>> h; - }; - } - var k = -1 != b.indexOf('unsigned'); - T(a, { - name: b, - fromWireType: g, - toWireType: function (l, n) { - if ('number' !== typeof n && 'boolean' !== typeof n) - throw new TypeError( - 'Cannot convert "' + Ua(n) + '" to ' + this.name, - ); - if (n < d || n > e) - throw new TypeError( - 'Passing a number "' + - Ua(n) + - '" from JS side to C/C++ side to an argument of type "' + - b + - '", which is outside the valid range [' + - d + - ', ' + - e + - ']!', - ); - return k ? n >>> 0 : n | 0; - }, - argPackAdvance: 8, - readValueFromPointer: eb(b, m, 0 !== d), - P: null, - }); - }, - b: function (a, b, c) { - function d(g) { - g >>= 2; - var m = K; - return new e(I, m[g + 1], m[g]); - } - var e = [ - Int8Array, - Uint8Array, - Int16Array, - Uint16Array, - Int32Array, - Uint32Array, - Float32Array, - Float64Array, - ][b]; - c = U(c); - T( - a, - { - name: c, - fromWireType: d, - argPackAdvance: 8, - readValueFromPointer: d, - }, - { ba: !0 }, - ); - }, - k: function (a, b) { - b = U(b); - var c = 'std::string' === b; - T(a, { - name: b, - fromWireType: function (d) { - var e = K[d >> 2]; - if (c) - for (var g = d + 4, m = 0; m <= e; ++m) { - var h = d + 4 + m; - if (m == e || 0 == D[h]) { - g = C(g, h - g); - if (void 0 === k) var k = g; - else (k += String.fromCharCode(0)), (k += g); - g = h + 1; - } - } - else { - k = Array(e); - for (m = 0; m < e; ++m) k[m] = String.fromCharCode(D[d + 4 + m]); - k = k.join(''); - } - Z(d); - return k; - }, - toWireType: function (d, e) { - e instanceof ArrayBuffer && (e = new Uint8Array(e)); - var g = 'string' === typeof e; - g || - e instanceof Uint8Array || - e instanceof Uint8ClampedArray || - e instanceof Int8Array || - W('Cannot pass non-string to std::string'); - var m = (c && g - ? function () { - for (var l = 0, n = 0; n < e.length; ++n) { - var q = e.charCodeAt(n); - 55296 <= q && - 57343 >= q && - (q = - (65536 + ((q & 1023) << 10)) | - (e.charCodeAt(++n) & 1023)); - 127 >= q - ? ++l - : (l = 2047 >= q ? l + 2 : 65535 >= q ? l + 3 : l + 4); - } - return l; - } - : function () { - return e.length; - })(), - h = nb(4 + m + 1); - K[h >> 2] = m; - if (c && g) ia(e, h + 4, m + 1); - else if (g) - for (g = 0; g < m; ++g) { - var k = e.charCodeAt(g); - 255 < k && - (Z(h), - W('String has UTF-16 code units that do not fit in 8 bits')); - D[h + 4 + g] = k; - } - else for (g = 0; g < m; ++g) D[h + 4 + g] = e[g]; - null !== d && d.push(Z, h); - return h; - }, - argPackAdvance: 8, - readValueFromPointer: Ha, - P: function (d) { - Z(d); - }, - }); - }, - f: function (a, b, c) { - c = U(c); - if (2 === b) { - var d = ka; - var e = la; - var g = ma; - var m = function () { - return E; - }; - var h = 1; - } else - 4 === b && - ((d = na), - (e = oa), - (g = pa), - (m = function () { - return K; - }), - (h = 2)); - T(a, { - name: c, - fromWireType: function (k) { - for (var l = K[k >> 2], n = m(), q, x = k + 4, y = 0; y <= l; ++y) { - var p = k + 4 + y * b; - if (y == l || 0 == n[p >> h]) - (x = d(x, p - x)), - void 0 === q - ? (q = x) - : ((q += String.fromCharCode(0)), (q += x)), - (x = p + b); - } - Z(k); - return q; - }, - toWireType: function (k, l) { - 'string' !== typeof l && - W('Cannot pass non-string to C++ string type ' + c); - var n = g(l), - q = nb(4 + n + b); - K[q >> 2] = n >> h; - e(l, q + 4, n + b); - null !== k && k.push(Z, q); - return q; - }, - argPackAdvance: 8, - readValueFromPointer: Ha, - P: function (k) { - Z(k); - }, - }); - }, - p: function (a, b, c, d, e, g) { - Fa[a] = { name: U(b), da: Y(c, d), ea: Y(e, g), U: [] }; - }, - c: function (a, b, c, d, e, g, m, h, k, l) { - Fa[a].U.push({ - X: U(b), - aa: c, - Z: Y(d, e), - $: g, - la: m, - ka: Y(h, k), - ma: l, - }); - }, - y: function (a, b) { - b = U(b); - T(a, { - na: !0, - name: b, - argPackAdvance: 0, - fromWireType: function () {}, - toWireType: function () {}, - }); - }, - j: Sa, - F: function (a) { - if (0 === a) return Ta(gb()); - var b = fb[a]; - a = void 0 === b ? U(a) : b; - return Ta(gb()[a]); - }, - m: function (a) { - 4 < a && (X[a].T += 1); - }, - q: function (a, b, c, d) { - a || W('Cannot use deleted val. handle = ' + a); - a = X[a].value; - var e = ib[b]; - if (!e) { - e = ''; - for (var g = 0; g < b; ++g) e += (0 !== g ? ', ' : '') + 'arg' + g; - var m = - 'return function emval_allocator_' + - b + - '(constructor, argTypes, args) {\n'; - for (g = 0; g < b; ++g) - m += - 'var argType' + - g + - " = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + " + - g + - '], "parameter ' + - g + - '");\nvar arg' + - g + - ' = argType' + - g + - '.readValueFromPointer(args);\nargs += argType' + - g + - "['argPackAdvance'];\n"; - e = new Function( - 'requireRegisteredType', - 'Module', - '__emval_register', - m + - ('var obj = new constructor(' + - e + - ');\nreturn __emval_register(obj);\n}\n'), - )(hb, f, Ta); - ib[b] = e; - } - return e(a, c, d); - }, - g: function () { - A(); - }, - u: function (a, b, c) { - D.copyWithin(a, b, b + c); - }, - e: function (a) { - a >>>= 0; - var b = D.length; - if (2147483648 < a) return !1; - for (var c = 1; 4 >= c; c *= 2) { - var d = b * (1 + 0.2 / c); - d = Math.min(d, a + 100663296); - d = Math.max(16777216, a, d); - 0 < d % 65536 && (d += 65536 - (d % 65536)); - a: { - try { - B.grow((Math.min(2147483648, d) - I.byteLength + 65535) >>> 16); - sa(B.buffer); - var e = 1; - break a; - } catch (g) {} - e = void 0; - } - if (e) return !0; - } - return !1; - }, - v: function () { - return 0; - }, - r: function () {}, - h: function (a, b, c, d) { - for (var e = 0, g = 0; g < c; g++) { - for ( - var m = H[(b + 8 * g) >> 2], h = H[(b + (8 * g + 4)) >> 2], k = 0; - k < h; - k++ - ) { - var l = D[m + k], - n = jb[a]; - if (0 === l || 10 === l) { - for (l = 0; n[l] && !(NaN <= l); ) ++l; - l = fa.decode( - n.subarray ? n.subarray(0, l) : new Uint8Array(n.slice(0, l)), - ); - (1 === a ? da : v)(l); - n.length = 0; - } else n.push(l); - } - e += h; - } - H[d >> 2] = e; - return 0; - }, - a: B, - l: function () { - return 0; - }, - E: function () { - return 0; - }, - D: function () {}, - C: function () { - return 6; - }, - B: function () {}, - s: function () {}, - }; - (function () { - function a(e) { - f.asm = e.exports; - L = f.asm.H; - M--; - f.monitorRunDependencies && f.monitorRunDependencies(M); - 0 == M && - (null !== za && (clearInterval(za), (za = null)), - N && ((e = N), (N = null), e())); - } - function b(e) { - a(e.instance); - } - function c(e) { - return Da() - .then(function (g) { - return WebAssembly.instantiate(g, d); - }) - .then(e, function (g) { - v('failed to asynchronously prepare wasm: ' + g); - A(g); - }); - } - var d = { a: ob }; - M++; - f.monitorRunDependencies && f.monitorRunDependencies(M); - 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 || - Aa() || - 'function' !== typeof fetch - ? c(b) - : fetch(O, { 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 mb = (f.___wasm_call_ctors = function () { - return (mb = f.___wasm_call_ctors = f.asm.I).apply(null, arguments); - }), - nb = (f._malloc = function () { - return (nb = f._malloc = f.asm.J).apply(null, arguments); - }), - Z = (f._free = function () { - return (Z = f._free = f.asm.K).apply(null, arguments); - }), - cb = (f.___getTypeName = function () { - return (cb = f.___getTypeName = f.asm.L).apply(null, arguments); - }); - f.___embind_register_native_and_builtin_types = function () { - return (f.___embind_register_native_and_builtin_types = f.asm.M).apply( - null, - arguments, - ); - }; - f.dynCall_jiji = function () { - return (f.dynCall_jiji = f.asm.N).apply(null, arguments); - }; - var pb; - N = function qb() { - pb || rb(); - pb || (N = qb); - }; - function rb() { - function a() { - if (!pb && ((pb = !0), (f.calledRun = !0), !ea)) { - P(va); - P(wa); - 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(); - xa.unshift(b); - } - P(xa); - } - } - if (!(0 < M)) { - if (f.preRun) - for ( - 'function' == typeof f.preRun && (f.preRun = [f.preRun]); - f.preRun.length; - - ) - ya(); - P(ua); - 0 < M || - (f.setStatus - ? (f.setStatus('Running...'), - setTimeout(function () { - setTimeout(function () { - f.setStatus(''); - }, 1); - a(); - }, 1)) - : a()); - } - } - f.run = rb; - if (f.preInit) - for ( - 'function' == typeof f.preInit && (f.preInit = [f.preInit]); - 0 < f.preInit.length; - - ) - f.preInit.pop()(); - noExitRuntime = !0; - rb(); - - return wp2_enc.ready; - }; -})(); -export default wp2_enc; diff --git a/codecs/wp2/enc/wp2_enc.wasm b/codecs/wp2/enc/wp2_enc.wasm deleted file mode 100755 index cd13fcc9..00000000 Binary files a/codecs/wp2/enc/wp2_enc.wasm and /dev/null differ diff --git a/src/features/encoders/avif/worker/avifEncode.ts b/src/features/encoders/avif/worker/avifEncode.ts index b3040439..c5103c2b 100644 --- a/src/features/encoders/avif/worker/avifEncode.ts +++ b/src/features/encoders/avif/worker/avifEncode.ts @@ -44,6 +44,5 @@ export default async function encode( if (!result) throw new Error('Encoding error'); - // wasm can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer. - return result.buffer as ArrayBuffer; + return result.buffer; } diff --git a/src/features/encoders/wp2/worker/wp2Encode.ts b/src/features/encoders/wp2/worker/wp2Encode.ts index ed9fdbef..96b21e26 100644 --- a/src/features/encoders/wp2/worker/wp2Encode.ts +++ b/src/features/encoders/wp2/worker/wp2Encode.ts @@ -10,24 +10,56 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import wp2Encoder, { WP2Module } from 'codecs/wp2/enc/wp2_enc'; -import wasmUrl from 'url:codecs/wp2/enc/wp2_enc.wasm'; -import { initEmscriptenModule } from 'features/worker-utils'; +import type { WP2Module } from 'codecs/wp2/enc/wp2_enc'; import type { EncodeOptions } from '../shared/meta'; +import { initEmscriptenModule } from 'features/worker-utils'; +import { threads, simd } from 'wasm-feature-detect'; + +import wasmUrl from 'url:codecs/wp2/enc/wp2_enc.wasm'; + +import wasmUrlWithMT from 'url:codecs/wp2/enc/wp2_enc_mt.wasm'; +import workerUrl from 'omt:codecs/wp2/enc/wp2_enc_mt.worker.js'; + +import wasmUrlWithMTAndSIMD from 'url:codecs/wp2/enc/wp2_enc_mt_simd.wasm'; +import workerUrlWithSIMD from 'omt:codecs/wp2/enc/wp2_enc_mt_simd.worker.js'; + let emscriptenModule: Promise; +async function init() { + if (await threads()) { + if (await simd()) { + const wp2Encoder = await import('codecs/wp2/enc/wp2_enc_mt_simd'); + return initEmscriptenModule( + wp2Encoder.default, + wasmUrlWithMTAndSIMD, + workerUrlWithSIMD, + ); + } + const wp2Encoder = await import('codecs/wp2/enc/wp2_enc_mt'); + return initEmscriptenModule( + wp2Encoder.default, + wasmUrlWithMT, + workerUrl, + ); + } + const wp2Encoder = await import('codecs/wp2/enc/wp2_enc'); + return initEmscriptenModule( + wp2Encoder.default, + wasmUrl, + ); +} + export default async function encode( data: ImageData, options: EncodeOptions, ): Promise { - if (!emscriptenModule) { - emscriptenModule = initEmscriptenModule(wp2Encoder, wasmUrl); - } + if (!emscriptenModule) emscriptenModule = init(); const module = await emscriptenModule; const result = module.encode(data.data, data.width, data.height, options); + if (!result) throw new Error('Encoding error.'); - // wasm can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer. - return result.buffer as ArrayBuffer; + + return result.buffer; }