mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-12 00:37:19 +00:00
Fix Lossless+Progressive JXL.
Also limit the workaround for memory usage to large images.
This commit is contained in:
committed by
Ingvar Stepanyan
parent
613401c541
commit
a699a5c4dc
@@ -14,12 +14,33 @@ thread_local const val ImageData = val::global("ImageData");
|
|||||||
// R, G, B, A
|
// R, G, B, A
|
||||||
#define COMPONENTS_PER_PIXEL 4
|
#define COMPONENTS_PER_PIXEL 4
|
||||||
|
|
||||||
|
#ifndef JXL_DEBUG_ON_ALL_ERROR
|
||||||
|
#define JXL_DEBUG_ON_ALL_ERROR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if JXL_DEBUG_ON_ALL_ERROR
|
||||||
|
#define EXPECT_TRUE(a) \
|
||||||
|
if (!(a)) { \
|
||||||
|
fprintf(stderr, "Assertion failure (%d): %s\n", __LINE__, #a); \
|
||||||
|
return val::null(); \
|
||||||
|
}
|
||||||
|
#define EXPECT_EQ(a, b) \
|
||||||
|
{ \
|
||||||
|
int a_ = a; \
|
||||||
|
int b_ = b; \
|
||||||
|
if (a_ != b_) { \
|
||||||
|
fprintf(stderr, "Assertion failure (%d): %s (%d) != %s (%d)\n", __LINE__, #a, a_, #b, b_); \
|
||||||
|
return val::null(); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
#else
|
||||||
#define EXPECT_TRUE(a) \
|
#define EXPECT_TRUE(a) \
|
||||||
if (!(a)) { \
|
if (!(a)) { \
|
||||||
return val::null(); \
|
return val::null(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EXPECT_EQ(a, b) EXPECT_TRUE((a) == (b));
|
#define EXPECT_EQ(a, b) EXPECT_TRUE((a) == (b));
|
||||||
|
#endif
|
||||||
|
|
||||||
val decode(std::string data) {
|
val decode(std::string data) {
|
||||||
std::unique_ptr<JxlDecoder,
|
std::unique_ptr<JxlDecoder,
|
||||||
|
|||||||
Binary file not shown.
@@ -38,7 +38,14 @@ val encode(std::string image, int width, int height, JXLOptions options) {
|
|||||||
|
|
||||||
// Reduce memory usage of tree learning for lossless data.
|
// Reduce memory usage of tree learning for lossless data.
|
||||||
// TODO(veluca93): this is a mitigation for excessive memory usage in the JXL encoder.
|
// TODO(veluca93): this is a mitigation for excessive memory usage in the JXL encoder.
|
||||||
cparams.options.nb_repeats = 0.1;
|
float megapixels = width * height * 0.000001;
|
||||||
|
if (megapixels > 8) {
|
||||||
|
cparams.options.nb_repeats = 0.1;
|
||||||
|
} else if (megapixels > 4) {
|
||||||
|
cparams.options.nb_repeats = 0.3;
|
||||||
|
} else {
|
||||||
|
// default is OK.
|
||||||
|
}
|
||||||
|
|
||||||
float quality = options.quality;
|
float quality = options.quality;
|
||||||
|
|
||||||
@@ -59,8 +66,10 @@ val encode(std::string image, int width, int height, JXLOptions options) {
|
|||||||
|
|
||||||
if (options.progressive) {
|
if (options.progressive) {
|
||||||
cparams.qprogressive_mode = true;
|
cparams.qprogressive_mode = true;
|
||||||
cparams.progressive_dc = 1;
|
|
||||||
cparams.responsive = 1;
|
cparams.responsive = 1;
|
||||||
|
if (!cparams.modular_mode) {
|
||||||
|
cparams.progressive_dc = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cparams.modular_mode) {
|
if (cparams.modular_mode) {
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user