mirror of
https://github.com/webmproject/libwebp.git
synced 2024-12-28 14:38:21 +01:00
Merge "gif2webp: introduce -loop_compatibility option"
This commit is contained in:
commit
c7f295d30c
2
README
2
README
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user