diff --git a/codecs/rotate/rotate.rs b/codecs/rotate/rotate.rs index ccac2ef2..645e1784 100644 --- a/codecs/rotate/rotate.rs +++ b/codecs/rotate/rotate.rs @@ -22,8 +22,8 @@ fn rotate(width: usize, height: usize, _rotate: usize) { let in_b: &mut [u32]; let out_b: &mut [u32]; unsafe { - in_b = from_raw_parts_mut::(4 as *mut u32, num_pixels); - out_b = from_raw_parts_mut::((num_pixels * 4 + 4) as *mut u32, num_pixels); + in_b = from_raw_parts_mut::(8 as *mut u32, num_pixels); + out_b = from_raw_parts_mut::((num_pixels * 4 + 8) as *mut u32, num_pixels); } let new_width = height; diff --git a/codecs/rotate/rotate.wasm b/codecs/rotate/rotate.wasm index 4ff66649..92547dc9 100755 Binary files a/codecs/rotate/rotate.wasm and b/codecs/rotate/rotate.wasm differ diff --git a/src/codecs/rotate/processor.ts b/src/codecs/rotate/processor.ts index 30bac75c..d880ac97 100644 --- a/src/codecs/rotate/processor.ts +++ b/src/codecs/rotate/processor.ts @@ -11,7 +11,7 @@ export async function rotate( // Number of wasm memory pages (รก 64KiB) needed to store the image twice. const bytesPerImage = data.width * data.height * 4; - const numPagesNeeded = Math.ceil((bytesPerImage * 2 + 4) / (64 * 1024)); + const numPagesNeeded = Math.ceil((bytesPerImage * 2 + 8) / (64 * 1024)); // Only count full pages, just to be safe. const numPagesAvailable = Math.floor(instance.exports.memory.buffer.byteLength / (64 * 1024)); const additionalPagesToAllocate = numPagesNeeded - numPagesAvailable; @@ -20,13 +20,13 @@ export async function rotate( instance.exports.memory.grow(additionalPagesToAllocate); } const view = new Uint8ClampedArray(instance.exports.memory.buffer); - view.set(data.data, 4); + view.set(data.data, 8); instance.exports.rotate(data.width, data.height, opts.rotate); const flipDimensions = opts.rotate % 180 !== 0; return new ImageData( - view.slice(bytesPerImage + 4, bytesPerImage * 2 + 4), + view.slice(bytesPerImage + 8, bytesPerImage * 2 + 8), flipDimensions ? data.height : data.width, flipDimensions ? data.width : data.height, );