mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-12 22:14:29 +02:00
Merge changes If4debc15,I437a5d5f into 0.4.1
* changes: restore encode API compatibility restore decode API compatibility
This commit is contained in:
@ -573,8 +573,10 @@ static void HelpLong(void) {
|
||||
printf(" default, photo, picture,\n");
|
||||
printf(" drawing, icon, text\n");
|
||||
printf(" -preset must come first, as it overwrites other parameters\n");
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
printf(" -z <int> ............... activates lossless preset with given\n"
|
||||
" level in [0:fast, ..., 9:slowest]\n");
|
||||
#endif
|
||||
printf("\n");
|
||||
printf(" -m <int> ............... compression method (0=fast, 6=slowest)\n");
|
||||
printf(" -segments <int> ........ number of segments to use (1..4)\n");
|
||||
@ -676,8 +678,10 @@ int main(int argc, const char *argv[]) {
|
||||
uint32_t background_color = 0xffffffu;
|
||||
int crop = 0, crop_x = 0, crop_y = 0, crop_w = 0, crop_h = 0;
|
||||
int resize_w = 0, resize_h = 0;
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
int lossless_preset = 6;
|
||||
int use_lossless_preset = -1; // -1=unset, 0=don't use, 1=use it
|
||||
#endif
|
||||
int show_progress = 0;
|
||||
int keep_metadata = 0;
|
||||
int metadata_written = 0;
|
||||
@ -732,13 +736,17 @@ int main(int argc, const char *argv[]) {
|
||||
picture.height = strtol(argv[++c], NULL, 0);
|
||||
} else if (!strcmp(argv[c], "-m") && c < argc - 1) {
|
||||
config.method = strtol(argv[++c], NULL, 0);
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
use_lossless_preset = 0; // disable -z option
|
||||
#endif
|
||||
} else if (!strcmp(argv[c], "-q") && c < argc - 1) {
|
||||
config.quality = (float)strtod(argv[++c], NULL);
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
use_lossless_preset = 0; // disable -z option
|
||||
} else if (!strcmp(argv[c], "-z") && c < argc - 1) {
|
||||
lossless_preset = strtol(argv[++c], NULL, 0);
|
||||
if (use_lossless_preset != 0) use_lossless_preset = 1;
|
||||
#endif
|
||||
} else if (!strcmp(argv[c], "-alpha_q") && c < argc - 1) {
|
||||
config.alpha_quality = strtol(argv[++c], NULL, 0);
|
||||
} else if (!strcmp(argv[c], "-alpha_method") && c < argc - 1) {
|
||||
@ -919,12 +927,14 @@ int main(int argc, const char *argv[]) {
|
||||
goto Error;
|
||||
}
|
||||
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
if (use_lossless_preset == 1) {
|
||||
if (!WebPConfigLosslessPreset(&config, lossless_preset)) {
|
||||
fprintf(stderr, "Invalid lossless preset (-z %d)\n", lossless_preset);
|
||||
goto Error;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Check for unsupported command line options for lossless mode and log
|
||||
// warning for such options.
|
||||
@ -1116,7 +1126,11 @@ int main(int argc, const char *argv[]) {
|
||||
return_value = 0;
|
||||
|
||||
Error:
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
WebPMemoryWriterClear(&memory_writer);
|
||||
#else
|
||||
free(memory_writer.mem);
|
||||
#endif
|
||||
free(picture.extra_info);
|
||||
MetadataFree(&metadata);
|
||||
WebPPictureFree(&picture);
|
||||
|
@ -557,11 +557,15 @@ static void Help(void) {
|
||||
" -nofilter .... disable in-loop filtering\n"
|
||||
" -nodither .... disable dithering\n"
|
||||
" -dither <d> .. dithering strength (in 0..100)\n"
|
||||
#if WEBP_DECODER_ABI_VERSION > 0x0203
|
||||
" -alpha_dither use alpha-plane dithering if needed\n"
|
||||
#endif
|
||||
" -mt .......... use multi-threading\n"
|
||||
" -crop <x> <y> <w> <h> ... crop output with the given rectangle\n"
|
||||
" -scale <w> <h> .......... scale the output (*after* any cropping)\n"
|
||||
#if WEBP_DECODER_ABI_VERSION > 0x0203
|
||||
" -flip ........ flip the output vertically\n"
|
||||
#endif
|
||||
" -alpha ....... only save the alpha plane\n"
|
||||
" -incremental . use incremental decoding (useful for tests)\n"
|
||||
" -h ....... this help message\n"
|
||||
@ -624,8 +628,10 @@ int main(int argc, const char *argv[]) {
|
||||
format = YUV;
|
||||
} else if (!strcmp(argv[c], "-mt")) {
|
||||
config.options.use_threads = 1;
|
||||
#if WEBP_DECODER_ABI_VERSION > 0x0203
|
||||
} else if (!strcmp(argv[c], "-alpha_dither")) {
|
||||
config.options.alpha_dithering_strength = 100;
|
||||
#endif
|
||||
} else if (!strcmp(argv[c], "-nodither")) {
|
||||
config.options.dithering_strength = 0;
|
||||
} else if (!strcmp(argv[c], "-dither") && c < argc - 1) {
|
||||
@ -640,8 +646,10 @@ int main(int argc, const char *argv[]) {
|
||||
config.options.use_scaling = 1;
|
||||
config.options.scaled_width = strtol(argv[++c], NULL, 0);
|
||||
config.options.scaled_height = strtol(argv[++c], NULL, 0);
|
||||
#if WEBP_DECODER_ABI_VERSION > 0x0203
|
||||
} else if (!strcmp(argv[c], "-flip")) {
|
||||
config.options.flip = 1;
|
||||
#endif
|
||||
} else if (!strcmp(argv[c], "-v")) {
|
||||
verbose = 1;
|
||||
#ifndef WEBP_DLL
|
||||
|
@ -475,10 +475,20 @@ static WebPEncodingError SetFrame(const WebPConfig* const config,
|
||||
// TODO(later): Perhaps a rough SSIM/PSNR produced by the encoder should
|
||||
// also be a criteria, in addition to sizes.
|
||||
if (mem1.size <= mem2.size) {
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
WebPMemoryWriterClear(&mem2);
|
||||
#else
|
||||
free(mem2.mem);
|
||||
memset(&mem2, 0, sizeof(mem2));
|
||||
#endif
|
||||
GetEncodedData(&mem1, encoded_data);
|
||||
} else {
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
WebPMemoryWriterClear(&mem1);
|
||||
#else
|
||||
free(mem1.mem);
|
||||
memset(&mem1, 0, sizeof(mem1));
|
||||
#endif
|
||||
GetEncodedData(&mem2, encoded_data);
|
||||
}
|
||||
} else {
|
||||
@ -487,8 +497,13 @@ static WebPEncodingError SetFrame(const WebPConfig* const config,
|
||||
return error_code;
|
||||
|
||||
Err:
|
||||
#if WEBP_ENCODER_ABI_VERSION > 0x0202
|
||||
WebPMemoryWriterClear(&mem1);
|
||||
WebPMemoryWriterClear(&mem2);
|
||||
#else
|
||||
free(mem1.mem);
|
||||
free(mem2.mem);
|
||||
#endif
|
||||
return error_code;
|
||||
}
|
||||
|
||||
|
@ -400,7 +400,9 @@ int main(int argc, char *argv[]) {
|
||||
return -1;
|
||||
}
|
||||
config->options.dithering_strength = 50;
|
||||
#if WEBP_DECODER_ABI_VERSION > 0x0203
|
||||
config->options.alpha_dithering_strength = 100;
|
||||
#endif
|
||||
kParams.use_color_profile = 1;
|
||||
|
||||
for (c = 1; c < argc; ++c) {
|
||||
@ -413,8 +415,10 @@ int main(int argc, char *argv[]) {
|
||||
config->options.no_fancy_upsampling = 1;
|
||||
} else if (!strcmp(argv[c], "-nofilter")) {
|
||||
config->options.bypass_filtering = 1;
|
||||
#if WEBP_DECODER_ABI_VERSION > 0x0203
|
||||
} else if (!strcmp(argv[c], "-noalphadither")) {
|
||||
config->options.alpha_dithering_strength = 0;
|
||||
#endif
|
||||
} else if (!strcmp(argv[c], "-dither") && c + 1 < argc) {
|
||||
config->options.dithering_strength = strtol(argv[++c], NULL, 0);
|
||||
} else if (!strcmp(argv[c], "-info")) {
|
||||
|
Reference in New Issue
Block a user