silently expose use_delta_palette in the WebPConfig API

is just a placeholder for now, unless WEBP_USE_EXPERIMENTAL_FEATURES
is defined.

Change-Id: I087cb49781560bc1a7fbb01b136d36115c97ef72
This commit is contained in:
Pascal Massimino 2017-01-20 00:01:33 -08:00
parent 668e1dd44f
commit eb1dc89a5f
4 changed files with 14 additions and 22 deletions

View File

@ -577,8 +577,8 @@ static void HelpLong(void) {
printf(" -near_lossless <int> ... use near-lossless image\n" printf(" -near_lossless <int> ... use near-lossless image\n"
" preprocessing (0..100=off), " " preprocessing (0..100=off), "
"default=100\n"); "default=100\n");
#ifdef WEBP_EXPERIMENTAL_FEATURES #ifdef WEBP_EXPERIMENTAL_FEATURES /* not documented yet */
printf(" -delta_palettization ... use delta palettization\n"); printf(" -delta_palette ......... use delta palettization\n");
#endif // WEBP_EXPERIMENTAL_FEATURES #endif // WEBP_EXPERIMENTAL_FEATURES
printf(" -hint <string> ......... specify image characteristics hint,\n"); printf(" -hint <string> ......... specify image characteristics hint,\n");
printf(" one of: photo, picture or graph\n"); printf(" one of: photo, picture or graph\n");
@ -749,9 +749,9 @@ int main(int argc, const char *argv[]) {
config.near_lossless = ExUtilGetInt(argv[++c], 0, &parse_error); config.near_lossless = ExUtilGetInt(argv[++c], 0, &parse_error);
config.lossless = 1; // use near-lossless only with lossless config.lossless = 1; // use near-lossless only with lossless
#ifdef WEBP_EXPERIMENTAL_FEATURES #ifdef WEBP_EXPERIMENTAL_FEATURES
} else if (!strcmp(argv[c], "-delta_palettization")) { } else if (!strcmp(argv[c], "-delta_palette")) {
config.delta_palettization = 1; config.use_delta_palette = 1;
config.lossless = 1; // use delta-palettization only with lossless config.lossless = 1; // delta-palette is for lossless only
#endif // WEBP_EXPERIMENTAL_FEATURES #endif // WEBP_EXPERIMENTAL_FEATURES
} else if (!strcmp(argv[c], "-hint") && c < argc - 1) { } else if (!strcmp(argv[c], "-hint") && c < argc - 1) {
++c; ++c;

View File

@ -53,9 +53,7 @@ int WebPConfigInitInternal(WebPConfig* config,
config->thread_level = 0; config->thread_level = 0;
config->low_memory = 0; config->low_memory = 0;
config->near_lossless = 100; config->near_lossless = 100;
#ifdef WEBP_EXPERIMENTAL_FEATURES config->use_delta_palette = 0;
config->delta_palettization = 0;
#endif // WEBP_EXPERIMENTAL_FEATURES
// TODO(skal): tune. // TODO(skal): tune.
switch (preset) { switch (preset) {
@ -121,11 +119,9 @@ int WebPValidateConfig(const WebPConfig* config) {
if (config->thread_level < 0 || config->thread_level > 1) return 0; if (config->thread_level < 0 || config->thread_level > 1) return 0;
if (config->low_memory < 0 || config->low_memory > 1) return 0; if (config->low_memory < 0 || config->low_memory > 1) return 0;
if (config->exact < 0 || config->exact > 1) return 0; if (config->exact < 0 || config->exact > 1) return 0;
#ifdef WEBP_EXPERIMENTAL_FEATURES if (config->use_delta_palette < 0 || config->use_delta_palette > 1) {
if (config->delta_palettization < 0 || config->delta_palettization > 1) {
return 0; return 0;
} }
#endif // WEBP_EXPERIMENTAL_FEATURES
return 1; return 1;
} }

View File

@ -1454,7 +1454,7 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
int use_near_lossless = 0; int use_near_lossless = 0;
int hdr_size = 0; int hdr_size = 0;
int data_size = 0; int data_size = 0;
int use_delta_palettization = 0; int use_delta_palette = 0;
if (enc == NULL) { if (enc == NULL) {
err = VP8_ENC_ERROR_OUT_OF_MEMORY; err = VP8_ENC_ERROR_OUT_OF_MEMORY;
@ -1481,7 +1481,7 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
} }
#ifdef WEBP_EXPERIMENTAL_FEATURES #ifdef WEBP_EXPERIMENTAL_FEATURES
if (config->delta_palettization) { if (config->use_delta_palette) {
enc->use_predict_ = 1; enc->use_predict_ = 1;
enc->use_cross_color_ = 0; enc->use_cross_color_ = 0;
enc->use_subtract_green_ = 0; enc->use_subtract_green_ = 0;
@ -1495,7 +1495,7 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
if (err != VP8_ENC_OK) goto Error; if (err != VP8_ENC_OK) goto Error;
err = EncodeDeltaPalettePredictorImage(bw, enc, quality, low_effort); err = EncodeDeltaPalettePredictorImage(bw, enc, quality, low_effort);
if (err != VP8_ENC_OK) goto Error; if (err != VP8_ENC_OK) goto Error;
use_delta_palettization = 1; use_delta_palette = 1;
} }
} }
#endif // WEBP_EXPERIMENTAL_FEATURES #endif // WEBP_EXPERIMENTAL_FEATURES
@ -1504,14 +1504,14 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
if (enc->use_palette_) { if (enc->use_palette_) {
err = EncodePalette(bw, low_effort, enc); err = EncodePalette(bw, low_effort, enc);
if (err != VP8_ENC_OK) goto Error; if (err != VP8_ENC_OK) goto Error;
err = MapImageFromPalette(enc, use_delta_palettization); err = MapImageFromPalette(enc, use_delta_palette);
if (err != VP8_ENC_OK) goto Error; if (err != VP8_ENC_OK) goto Error;
// If using a color cache, do not have it bigger than the number of colors. // If using a color cache, do not have it bigger than the number of colors.
if (use_cache && enc->palette_size_ < (1 << MAX_COLOR_CACHE_BITS)) { if (use_cache && enc->palette_size_ < (1 << MAX_COLOR_CACHE_BITS)) {
enc->cache_bits_ = BitsLog2Floor(enc->palette_size_) + 1; enc->cache_bits_ = BitsLog2Floor(enc->palette_size_) + 1;
} }
} }
if (!use_delta_palettization) { if (!use_delta_palette) {
// In case image is not packed. // In case image is not packed.
if (enc->argb_ == NULL) { if (enc->argb_ == NULL) {
err = MakeInputImageCopy(enc); err = MakeInputImageCopy(enc);

View File

@ -20,7 +20,7 @@
extern "C" { extern "C" {
#endif #endif
#define WEBP_ENCODER_ABI_VERSION 0x020b // MAJOR(8b) + MINOR(8b) #define WEBP_ENCODER_ABI_VERSION 0x020c // MAJOR(8b) + MINOR(8b)
// Note: forward declaring enumerations is not allowed in (strict) C and C++, // Note: forward declaring enumerations is not allowed in (strict) C and C++,
// the types are left here for reference. // the types are left here for reference.
@ -141,12 +141,8 @@ struct WebPConfig {
// RGB information for better compression. The default // RGB information for better compression. The default
// value is 0. // value is 0.
#ifdef WEBP_EXPERIMENTAL_FEATURES int use_delta_palette; // reserved for future lossless feature
int delta_palettization;
uint32_t pad[2]; // padding for later use
#else
uint32_t pad[3]; // padding for later use uint32_t pad[3]; // padding for later use
#endif // WEBP_EXPERIMENTAL_FEATURES
}; };
// Enumerate some predefined settings for WebPConfig, depending on the type // Enumerate some predefined settings for WebPConfig, depending on the type