diff options
author | TommyTheTerrible <81168766+TommyTheTerrible@users.noreply.github.com> | 2024-09-09 05:31:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-09 12:31:00 +0300 |
commit | 2f692fbac36117e1b3c5f2ec214fd188c7e73da7 (patch) | |
tree | 683b32ffff2a4f5d38bb0ebd55d7e71144ad8034 | |
parent | 2b7b81fbdbaaaa8698828af9529f9693692da2a2 (diff) |
Update calcDataSizeJ2C to stop undersized blocks (#2525)
The initial block area for the pyramid walk should not be smaller than the max_block_size area so need an llmax to not allow multiplication below 1.
This was causing decode errors for complex small images (128x128 or smaller) on discard 1 and 2.
-rw-r--r-- | indra/llimage/llimagej2c.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index 753e5d24df..aa161709a1 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -281,7 +281,7 @@ S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 r S32 height = (h > 0) ? h : 2048; S32 max_dimension = llmax(width, height); // Find largest dimension S32 block_area = MAX_BLOCK_SIZE * MAX_BLOCK_SIZE; // Calculated initial block area from established max block size (currently 64) - block_area *= (max_dimension / MAX_BLOCK_SIZE / max_components); // Adjust initial block area by ratio of largest dimension to block size per component + block_area *= llmax((max_dimension / MAX_BLOCK_SIZE / max_components), 1); // Adjust initial block area by ratio of largest dimension to block size per component S32 totalbytes = (S32) (block_area * max_components * precision); // First block layer computed before loop without compression rate S32 block_layers = 1; // Start at layer 1 since first block layer is computed outside loop while (block_layers < 6) // Walk five layers for the five discards in JPEG2000 |