diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index 8c6fe3386..08d1358e7 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -363,8 +363,7 @@ S32 LLImageJ2C::calcHeaderSizeJ2C() return FIRST_PACKET_SIZE; // Hack. just needs to be >= actual header size... } -//static -S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate) +static S32 cald_data_size_help(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate) { if (rate <= 0.f) rate = .125f; while (discard_level > 0) @@ -376,10 +375,25 @@ S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 r discard_level--; } S32 bytes = (S32)((F32)(w*h*comp)*rate); - //bytes = llmax(bytes, calcHeaderSizeJ2C()); return bytes; } + +//static +S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate) +{ + static const LLCachedControl exponent("SianaJ2CSizeExponent", 1.0f); + static const LLCachedControl offset("SianaJ2CSizeOffset", 0); + S32 size = cald_data_size_help(w, h, comp, discard_level, rate); + S32 size_d0 = cald_data_size_help(w, h, comp, 0, rate); + + llassert_always(size_d0); + S32 bytes = pow(size/size_d0, exponent)*size_d0 + offset; + bytes = llmax (0, bytes - 600); + bytes = ((bytes + (1000 - 1))/1000)*1000 + 600; + return bytes; +} + S32 LLImageJ2C::calcHeaderSize() { return calcHeaderSizeJ2C(); @@ -392,15 +406,7 @@ S32 LLImageJ2C::calcDataSize(S32 discard_level) static const LLCachedControl legacy_size("SianaLegacyJ2CSize", false); if (legacy_size) { - static const LLCachedControl exponent("SianaJ2CSizeExponent", 1.0f); - static const LLCachedControl offset("SianaJ2CSizeOffset", 0); - - S32 size = calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), discard_level, mRate); - S32 size_d0 = calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), 0, mRate); - llassert_always(size_d0); - S32 bytes = pow(size/size_d0, exponent)*size_d0 + offset; - bytes = llmax(bytes, calcHeaderSizeJ2C()); - return bytes; + return calcDataSizeJ2C(getWidth(), getHeight(), getComponents(), discard_level, mRate); } discard_level = llclamp(discard_level, 0, MAX_DISCARD_LEVEL); diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp index afcd914f4..d55a3e738 100644 --- a/indra/llimagej2coj/llimagej2coj.cpp +++ b/indra/llimagej2coj/llimagej2coj.cpp @@ -149,7 +149,14 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod opj_setup_decoder(dinfo, ¶meters); /* open a byte stream */ +#if 0 + std::vector data(base.getData(), base.getData()+base.getDataSize()); + data.push_back((U8)0xFF); + data.push_back((U8)0xD9); + cio = opj_cio_open((opj_common_ptr)dinfo, &data[0], data.size()); +#else cio = opj_cio_open((opj_common_ptr)dinfo, base.getData(), base.getDataSize()); +#endif /* decode the stream and fill the image structure */ image = opj_decode(dinfo, cio); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2ecbfbb56..f14115db6 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -287,7 +287,7 @@ Type F32 Value - 0.5 + 1.0 SianaJ2CSizeOffset