mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-11 16:26:20 +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
|
||||
#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) \
|
||||
if (!(a)) { \
|
||||
return val::null(); \
|
||||
}
|
||||
|
||||
#define EXPECT_EQ(a, b) EXPECT_TRUE((a) == (b));
|
||||
#endif
|
||||
|
||||
val decode(std::string data) {
|
||||
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.
|
||||
// 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;
|
||||
|
||||
@@ -59,8 +66,10 @@ val encode(std::string image, int width, int height, JXLOptions options) {
|
||||
|
||||
if (options.progressive) {
|
||||
cparams.qprogressive_mode = true;
|
||||
cparams.progressive_dc = 1;
|
||||
cparams.responsive = 1;
|
||||
if (!cparams.modular_mode) {
|
||||
cparams.progressive_dc = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (cparams.modular_mode) {
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user