Merge "gif2webp: introduce -loop_compatibility option"

This commit is contained in:
Pascal Massimino 2017-09-20 09:13:37 +00:00 committed by Gerrit Code Review
commit c7f295d30c
3 changed files with 29 additions and 5 deletions

2
README
View File

@ -477,6 +477,8 @@ Options:
-metadata <string> ..... comma separated list of metadata to -metadata <string> ..... comma separated list of metadata to
copy from the input to the output if present copy from the input to the output if present
Valid values: all, none, icc, xmp (default) Valid values: all, none, icc, xmp (default)
-loop_compatibility .... use compatibility mode for Chrome
version prior to M62 (inclusive)
-mt .................... use multi-threading if available -mt .................... use multi-threading if available
-version ............... print version number and exit -version ............... print version number and exit

View File

@ -72,8 +72,10 @@ static void Help(void) {
printf(" -metadata <string> ..... comma separated list of metadata to\n"); printf(" -metadata <string> ..... comma separated list of metadata to\n");
printf(" "); printf(" ");
printf("copy from the input to the output if present\n"); printf("copy from the input to the output if present\n");
printf(" " printf(" ");
"Valid values: all, none, icc, xmp (default)\n"); printf("Valid values: all, none, icc, xmp (default)\n");
printf(" -loop_compatibility .... use compatibility mode for Chrome\n");
printf(" version prior to M62 (inclusive)\n");
printf(" -mt .................... use multi-threading if available\n"); printf(" -mt .................... use multi-threading if available\n");
printf("\n"); printf("\n");
printf(" -version ............... print version number and exit\n"); printf(" -version ............... print version number and exit\n");
@ -115,8 +117,9 @@ int main(int argc, const char *argv[]) {
int stored_icc = 0; // Whether we have already stored an ICC profile. int stored_icc = 0; // Whether we have already stored an ICC profile.
WebPData xmp_data; WebPData xmp_data;
int stored_xmp = 0; // Whether we have already stored an XMP profile. int stored_xmp = 0; // Whether we have already stored an XMP profile.
int loop_count = 0; int loop_count = 0; // default: infinite
int stored_loop_count = 0; // Whether we have found an explicit loop count. int stored_loop_count = 0; // Whether we have found an explicit loop count.
int loop_compatibility = 0;
WebPMux* mux = NULL; WebPMux* mux = NULL;
int default_kmin = 1; // Whether to use default kmin value. int default_kmin = 1; // Whether to use default kmin value.
@ -151,6 +154,8 @@ int main(int argc, const char *argv[]) {
} else if (!strcmp(argv[c], "-mixed")) { } else if (!strcmp(argv[c], "-mixed")) {
enc_options.allow_mixed = 1; enc_options.allow_mixed = 1;
config.lossless = 0; config.lossless = 0;
} else if (!strcmp(argv[c], "-loop_compatibility")) {
loop_compatibility = 1;
} else if (!strcmp(argv[c], "-q") && c < argc - 1) { } else if (!strcmp(argv[c], "-q") && c < argc - 1) {
config.quality = ExUtilGetFloat(argv[++c], &parse_error); config.quality = ExUtilGetFloat(argv[++c], &parse_error);
} else if (!strcmp(argv[c], "-m") && c < argc - 1) { } else if (!strcmp(argv[c], "-m") && c < argc - 1) {
@ -386,7 +391,7 @@ int main(int argc, const char *argv[]) {
if (verbose) { if (verbose) {
fprintf(stderr, "Loop count: %d\n", loop_count); fprintf(stderr, "Loop count: %d\n", loop_count);
} }
stored_loop_count = (loop_count != 0); stored_loop_count = loop_compatibility ? (loop_count != 0) : 1;
} else { // An extension containing metadata. } else { // An extension containing metadata.
// We only store the first encountered chunk of each type, and // We only store the first encountered chunk of each type, and
// only if requested by the user. // only if requested by the user.
@ -443,6 +448,20 @@ int main(int argc, const char *argv[]) {
goto End; goto End;
} }
if (!loop_compatibility) {
if (!stored_loop_count) {
// if no loop-count element is seen, the default is '1' (loop-once)
// and we need to signal it explicitly in WebP.
stored_loop_count = 1;
loop_count = 1;
} else if (loop_count > 0) {
// adapt GIF's semantic to WebP's (except in the infinite-loop case)
loop_count += 1;
}
}
// loop_count of 0 is the default (infinite), so no need to signal it
if (loop_count == 0) stored_loop_count = 0;
if (stored_loop_count || stored_icc || stored_xmp) { if (stored_loop_count || stored_icc || stored_xmp) {
// Re-mux to add loop count and/or metadata as needed. // Re-mux to add loop count and/or metadata as needed.
mux = WebPMuxCreate(&webp_data, 1); mux = WebPMuxCreate(&webp_data, 1);

View File

@ -1,5 +1,5 @@
.\" Hey, EMACS: -*- nroff -*- .\" Hey, EMACS: -*- nroff -*-
.TH GIF2WEBP 1 "January 25, 2017" .TH GIF2WEBP 1 "September 20, 2017"
.SH NAME .SH NAME
gif2webp \- Convert a GIF image to WebP gif2webp \- Convert a GIF image to WebP
.SH SYNOPSIS .SH SYNOPSIS
@ -109,6 +109,9 @@ the range of 20 to 50.
.TP .TP
.B \-mt .B \-mt
Use multi-threading for encoding, if possible. Use multi-threading for encoding, if possible.
.B \-loop_compatibility
If enabled, handle the loop information in a compatible fashion for Chrome
version prior to M62 (inclusive) and Firefox.
.TP .TP
.B \-v .B \-v
Print extra information. Print extra information.