mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-28 03:57:57 -06:00
- finish_8bit/finish_deep hand back the render itself when there is no output sharpening and no watermark. Before, every export cloned the image (~100 MB at 24 MP) and output_sharpen built a ~290 MB float copy of it even for SharpenFor::None, all on one thread. - Output sharpening's box blurs run row-parallel (par_rows); each pixel is computed as before. - The parallel JPEG encoder converts each band's rows to YCbCr inside the band's task instead of first filling whole-image planes (~290 MB for 4:4:4 at 24 MP, written once and read back). - fdct_quant rounds with plain arithmetic (round_i16) instead of f32::round, a libm call per coefficient without SSE4.1; it equals `x.round() as i16` for all 2^32 inputs. Output is byte-identical (pinned by encoded_bytes_are_pinned and sharpened_pixels_are_pinned, whose hashes come from main). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>