diff options
| author | Hecklezz <tj8@live.com.au> | 2025-09-19 18:49:25 +1000 |
|---|---|---|
| committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2025-09-19 19:16:35 +0300 |
| commit | 569d7c6a8b1e44b66dad16a3367547cdf3395620 (patch) | |
| tree | 4d7e500e132f89a235f9d58f82b6a16428c037b0 | |
| parent | acd879477508e8389607d5eeb0e91531fd7703e9 (diff) | |
Fix OpenJPEG uploading small textures by correctly accounting for the maximum numresolutions
| -rw-r--r-- | indra/llimagej2coj/llimagej2coj.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp index 5fa53657a0..7cfadb889d 100644 --- a/indra/llimagej2coj/llimagej2coj.cpp +++ b/indra/llimagej2coj/llimagej2coj.cpp @@ -554,11 +554,6 @@ public: } - if (!opj_setup_encoder(encoder, ¶meters, image)) - { - return false; - } - U32 width_tiles = (rawImageIn.getWidth() >> 6); U32 height_tiles = (rawImageIn.getHeight() >> 6); @@ -572,6 +567,19 @@ public: height_tiles = 1; } + if (width_tiles == 1 || height_tiles == 1) + { + // Images with either dimension less than 32 need less number of resolutions otherwise they error + int min_dim = rawImageIn.getWidth() < rawImageIn.getHeight() ? rawImageIn.getWidth() : rawImageIn.getHeight(); + int max_res = 1 + (int)floor(log2(min_dim)); + parameters.numresolution = max_res; + } + + if (!opj_setup_encoder(encoder, ¶meters, image)) + { + return false; + } + U32 tile_count = width_tiles * height_tiles; U32 data_size_guess = tile_count * TILE_SIZE; |
