mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-16 10:39:53 +00:00
Code review
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "rotate",
|
"name": "rotate",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "mv rotate.{as,ts} && asc rotate.ts -b rotate.wasm --validate --optimize && mv rotate.{ts,as}"
|
"build": "mv rotate.{as,ts} && asc rotate.ts -b rotate.wasm --validate -O3 && mv rotate.{ts,as}"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"assemblyscript": "github:AssemblyScript/assemblyscript"
|
"assemblyscript": "github:AssemblyScript/assemblyscript"
|
||||||
|
|||||||
@@ -54,8 +54,9 @@ export function rotate(inputWidth: i32, inputHeight: i32, rotate: i32): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (let d2 = d2Start; d2 >= 0 && d2 < d2Limit; d2 += d2Advance) {
|
for (let d2 = d2Start; d2 >= 0 && d2 < d2Limit; d2 += d2Advance) {
|
||||||
|
let d2offset = d2 * d2Multiplier;
|
||||||
for (let d1 = d1Start; d1 >= 0 && d1 < d1Limit; d1 += d1Advance) {
|
for (let d1 = d1Start; d1 >= 0 && d1 < d1Limit; d1 += d1Advance) {
|
||||||
let start = ((d1 * d1Multiplier) + (d2 * d2Multiplier));
|
let start = ((d1 * d1Multiplier) + d2offset);
|
||||||
store<u32>(offset + i * 4, load<u32>(start * 4));
|
store<u32>(offset + i * 4, load<u32>(start * 4));
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -9,18 +9,14 @@ export async function rotate(
|
|||||||
// Number of wasm memory pages (á 64KiB) needed to store the image twice.
|
// Number of wasm memory pages (á 64KiB) needed to store the image twice.
|
||||||
const bytesPerImage = data.width * data.height * 4;
|
const bytesPerImage = data.width * data.height * 4;
|
||||||
const numPagesNeeded = Math.ceil(bytesPerImage * 2 / (64 * 1024));
|
const numPagesNeeded = Math.ceil(bytesPerImage * 2 / (64 * 1024));
|
||||||
// const memory = new Uint8ClampedArray(data.data.length * 2);
|
|
||||||
// const memory = new WebAssembly.Memory({
|
|
||||||
// initial: Math.ceil(data.width * data.height * 4 * 2 / (64 * 1024)),
|
|
||||||
// });
|
|
||||||
const { instance } = (await (WebAssembly as any).instantiateStreaming(
|
const { instance } = (await (WebAssembly as any).instantiateStreaming(
|
||||||
fetch(wasmUrl),
|
fetch(wasmUrl),
|
||||||
)) as { instance: RotateModuleInstance };
|
)) as { instance: RotateModuleInstance };
|
||||||
|
|
||||||
instance.exports.memory.grow(numPagesNeeded);
|
instance.exports.memory.grow(numPagesNeeded);
|
||||||
|
|
||||||
const view = new Uint8ClampedArray(instance.exports.memory.buffer);
|
const view = new Uint8ClampedArray(instance.exports.memory.buffer);
|
||||||
view.set(data.data);
|
view.set(data.data);
|
||||||
(self as any).instance = instance;
|
|
||||||
instance.exports.rotate(data.width, data.height, opts.rotate);
|
instance.exports.rotate(data.width, data.height, opts.rotate);
|
||||||
return new ImageData(
|
return new ImageData(
|
||||||
view.slice(bytesPerImage, bytesPerImage * 2),
|
view.slice(bytesPerImage, bytesPerImage * 2),
|
||||||
|
|||||||
Reference in New Issue
Block a user