diff --git a/codecs/resize/Cargo.lock b/codecs/resize/Cargo.lock index 26b9dbac..e82d11f5 100644 --- a/codecs/resize/Cargo.lock +++ b/codecs/resize/Cargo.lock @@ -1,5 +1,18 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "bumpalo" version = "3.4.0" @@ -8,9 +21,9 @@ checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" [[package]] name = "bytemuck" -version = "1.4.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41aa2ec95ca3b5c54cf73c91acf06d24f4495d5f1b1c12506ae3483d646177ac" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" [[package]] name = "cfg-if" @@ -34,12 +47,41 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "fallible_collections" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f57ccc32870366ae684be48b32a1a2e196f98a42a9b4361fe77e13fd4a34755" +dependencies = [ + "hashbrown", +] + [[package]] name = "futures" version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + [[package]] name = "js-sys" version = "0.3.41" @@ -49,17 +91,11 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" -version = "0.2.72" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f8082297d534141b30c8d39e9b1773713ab50fdbe4ff30f750d063b3bfd701" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "log" @@ -76,22 +112,28 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" +[[package]] +name = "once_cell" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" + [[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" dependencies = [ - "unicode-xid 0.1.0", + "unicode-xid", ] [[package]] name = "proc-macro2" -version = "1.0.27" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" dependencies = [ - "unicode-xid 0.2.1", + "unicode-ident", ] [[package]] @@ -109,23 +151,24 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ - "proc-macro2 1.0.27", + "proc-macro2 1.0.51", ] [[package]] name = "resize" -version = "0.5.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2a08c42ea86684dc00256494c4eb8b54707890ddac50c05060a717f29669029" +checksum = "87e7bdfff05e26408cf8f82fe896ce3d7624f0c0b06c84b2f1009c50452ead41" dependencies = [ + "fallible_collections", "rgb", ] [[package]] name = "rgb" -version = "0.8.25" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287f3c3f8236abb92d8b7e36797f19159df4b58f0a658cc3fb6dd3004b1f3bd3" +checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" dependencies = [ "bytemuck", ] @@ -143,6 +186,7 @@ dependencies = [ "cfg-if 0.1.10", "console_error_panic_hook", "resize", + "rgb", "wasm-bindgen", "wasm-bindgen-test", "wee_alloc", @@ -150,15 +194,21 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.72" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ - "proc-macro2 1.0.27", + "proc-macro2 1.0.51", "quote 1.0.7", - "unicode-xid 0.2.1", + "unicode-ident", ] +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + [[package]] name = "unicode-xid" version = "0.1.0" @@ -166,16 +216,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] -name = "unicode-xid" -version = "0.2.1" +name = "version_check" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.74" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -183,14 +239,14 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.74" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", - "lazy_static", "log", - "proc-macro2 1.0.27", + "once_cell", + "proc-macro2 1.0.51", "quote 1.0.7", "syn", "wasm-bindgen-shared", @@ -211,9 +267,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.74" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote 1.0.7", "wasm-bindgen-macro-support", @@ -221,11 +277,11 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.74" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ - "proc-macro2 1.0.27", + "proc-macro2 1.0.51", "quote 1.0.7", "syn", "wasm-bindgen-backend", @@ -234,9 +290,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.74" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-bindgen-test" diff --git a/codecs/resize/Cargo.toml b/codecs/resize/Cargo.toml index 76d2b153..4fac966f 100644 --- a/codecs/resize/Cargo.toml +++ b/codecs/resize/Cargo.toml @@ -13,8 +13,9 @@ default = ["console_error_panic_hook", "wee_alloc"] [dependencies] cfg-if = "0.1.2" -wasm-bindgen = "0.2.38" -resize = "0.5.5" +wasm-bindgen = "0.2.84" +resize = "0.7.4" +rgb = "0.8.33" # The `console_error_panic_hook` crate provides better debugging of panics by # logging them with `console.error`. This is great for development, but requires @@ -36,3 +37,4 @@ wasm-bindgen-test = "0.2" # Tell `rustc` to optimize for small code size. opt-level = "s" lto = true +target-feature = "+bulk-memory" diff --git a/codecs/resize/package-lock.json b/codecs/resize/package-lock.json index ca1a498d..e246878c 100644 --- a/codecs/resize/package-lock.json +++ b/codecs/resize/package-lock.json @@ -1,4 +1,10 @@ { "name": "resize", - "lockfileVersion": 1 + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "resize" + } + } } diff --git a/codecs/resize/pkg/squoosh_resize.d.ts b/codecs/resize/pkg/squoosh_resize.d.ts index 56114c7f..bdafefdd 100644 --- a/codecs/resize/pkg/squoosh_resize.d.ts +++ b/codecs/resize/pkg/squoosh_resize.d.ts @@ -23,6 +23,17 @@ export interface InitOutput { readonly __wbindgen_free: (a: number, b: number) => void; } +export type SyncInitInput = BufferSource | WebAssembly.Module; +/** +* Instantiates the given `module`, which can either be bytes or +* a precompiled `WebAssembly.Module`. +* +* @param {SyncInitInput} module +* +* @returns {InitOutput} +*/ +export function initSync(module: SyncInitInput): InitOutput; + /** * If `module_or_path` is {RequestInfo} or {URL}, makes a request and * for everything else, calls `WebAssembly.instantiate` directly. diff --git a/codecs/resize/pkg/squoosh_resize.js b/codecs/resize/pkg/squoosh_resize.js index 2e6a0dd4..accd70a2 100644 --- a/codecs/resize/pkg/squoosh_resize.js +++ b/codecs/resize/pkg/squoosh_resize.js @@ -1,12 +1,12 @@ - let wasm; -let cachegetUint8Memory0 = null; +let cachedUint8Memory0 = null; + function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); } - return cachegetUint8Memory0; + return cachedUint8Memory0; } let WASM_VECTOR_LEN = 0; @@ -18,20 +18,22 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachegetInt32Memory0 = null; +let cachedInt32Memory0 = null; + function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); } - return cachegetInt32Memory0; + return cachedInt32Memory0; } -let cachegetUint8ClampedMemory0 = null; +let cachedUint8ClampedMemory0 = null; + function getUint8ClampedMemory0() { - if (cachegetUint8ClampedMemory0 === null || cachegetUint8ClampedMemory0.buffer !== wasm.memory.buffer) { - cachegetUint8ClampedMemory0 = new Uint8ClampedArray(wasm.memory.buffer); + if (cachedUint8ClampedMemory0 === null || cachedUint8ClampedMemory0.byteLength === 0) { + cachedUint8ClampedMemory0 = new Uint8ClampedArray(wasm.memory.buffer); } - return cachegetUint8ClampedMemory0; + return cachedUint8ClampedMemory0; } function getClampedArrayU8FromWasm0(ptr, len) { @@ -51,8 +53,8 @@ function getClampedArrayU8FromWasm0(ptr, len) { export function resize(input_image, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passArray8ToWasm0(input_image, wasm.__wbindgen_malloc); - var len0 = WASM_VECTOR_LEN; + const ptr0 = passArray8ToWasm0(input_image, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; wasm.resize(retptr, ptr0, len0, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion); var r0 = getInt32Memory0()[retptr / 4 + 0]; var r1 = getInt32Memory0()[retptr / 4 + 1]; @@ -95,26 +97,58 @@ async function load(module, imports) { } } +function getImports() { + const imports = {}; + imports.wbg = {}; + + return imports; +} + +function initMemory(imports, maybe_memory) { + +} + +function finalizeInit(instance, module) { + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + cachedInt32Memory0 = null; + cachedUint8Memory0 = null; + cachedUint8ClampedMemory0 = null; + + + return wasm; +} + +function initSync(module) { + const imports = getImports(); + + initMemory(imports); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return finalizeInit(instance, module); +} + async function init(input) { if (typeof input === 'undefined') { input = new URL('squoosh_resize_bg.wasm', import.meta.url); } - const imports = {}; - + const imports = getImports(); if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { input = fetch(input); } - + initMemory(imports); const { instance, module } = await load(await input, imports); - wasm = instance.exports; - init.__wbindgen_wasm_module = module; - - return wasm; + return finalizeInit(instance, module); } +export { initSync } export default init; - diff --git a/codecs/resize/pkg/squoosh_resize_bg.wasm b/codecs/resize/pkg/squoosh_resize_bg.wasm index b910c97b..be5842c2 100644 Binary files a/codecs/resize/pkg/squoosh_resize_bg.wasm and b/codecs/resize/pkg/squoosh_resize_bg.wasm differ diff --git a/codecs/resize/src/lib.rs b/codecs/resize/src/lib.rs index 6e550b10..1c46593c 100644 --- a/codecs/resize/src/lib.rs +++ b/codecs/resize/src/lib.rs @@ -1,5 +1,6 @@ extern crate cfg_if; extern crate resize; +extern crate rgb; extern crate wasm_bindgen; mod utils; @@ -7,6 +8,7 @@ mod utils; use cfg_if::cfg_if; use resize::Pixel; use resize::Type; +use rgb::FromSlice; use wasm_bindgen::prelude::*; use wasm_bindgen::Clamped; @@ -88,10 +90,14 @@ pub fn resize( input_height, output_width, output_height, - Pixel::RGBA, + Pixel::RGBA8, typ, + ) + .expect("Couldn't create resizer"); + resizer.resize( + input_image.as_slice().as_rgba(), + output_image.as_mut_slice().as_rgba_mut(), ); - resizer.resize(input_image.as_slice(), output_image.as_mut_slice()); return Clamped(output_image); } @@ -121,10 +127,11 @@ pub fn resize( output_height, Pixel::RGBAF32, typ, - ); + ) + .expect("Couldn't create resizer"); resizer.resize( - preprocessed_input_image.as_slice(), - unprocessed_output_image.as_mut_slice(), + preprocessed_input_image.as_slice().as_rgba(), + unprocessed_output_image.as_mut_slice().as_rgba_mut(), ); for i in 0..num_output_pixels { diff --git a/codecs/rust.Dockerfile b/codecs/rust.Dockerfile index e72f0803..6111a096 100644 --- a/codecs/rust.Dockerfile +++ b/codecs/rust.Dockerfile @@ -1,8 +1,8 @@ -ARG RUST_IMG=rust:1.47 +ARG RUST_IMG=rust:1.67 FROM emscripten/emsdk:2.0.8 AS wasm-tools WORKDIR /opt/wasm-tools -RUN wget -qO- https://github.com/rustwasm/wasm-pack/releases/download/v0.9.1/wasm-pack-v0.9.1-x86_64-unknown-linux-musl.tar.gz | tar -xzf - --strip 1 +RUN wget -qO- https://github.com/rustwasm/wasm-pack/releases/download/v0.10.3/wasm-pack-v0.10.3-x86_64-unknown-linux-musl.tar.gz | tar -xzf - --strip 1 FROM $RUST_IMG AS rust ARG RUST_IMG diff --git a/package-lock.json b/package-lock.json index f643147e..f4ed52c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,6 @@ "name": "squoosh", "version": "2.0.0", "license": "apache-2.0", - "dependencies": { - "wasm-feature-detect": "^1.2.11" - }, "devDependencies": { "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-node-resolve": "^11.1.0", @@ -46,6 +43,7 @@ "rollup-plugin-terser": "^7.0.2", "serve": "^11.3.2", "typescript": "^4.4.4", + "wasm-feature-detect": "^1.2.11", "which": "^2.0.2" } }, @@ -8561,7 +8559,8 @@ "node_modules/wasm-feature-detect": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.2.11.tgz", - "integrity": "sha512-HUqwaodrQGaZgz1lZaNioIkog9tkeEJjrM3eq4aUL04whXOVDRc/o2EGb/8kV0QX411iAYWEqq7fMBmJ6dKS6w==" + "integrity": "sha512-HUqwaodrQGaZgz1lZaNioIkog9tkeEJjrM3eq4aUL04whXOVDRc/o2EGb/8kV0QX411iAYWEqq7fMBmJ6dKS6w==", + "dev": true }, "node_modules/which": { "version": "2.0.2", @@ -15757,7 +15756,8 @@ "wasm-feature-detect": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.2.11.tgz", - "integrity": "sha512-HUqwaodrQGaZgz1lZaNioIkog9tkeEJjrM3eq4aUL04whXOVDRc/o2EGb/8kV0QX411iAYWEqq7fMBmJ6dKS6w==" + "integrity": "sha512-HUqwaodrQGaZgz1lZaNioIkog9tkeEJjrM3eq4aUL04whXOVDRc/o2EGb/8kV0QX411iAYWEqq7fMBmJ6dKS6w==", + "dev": true }, "which": { "version": "2.0.2",