Add support for "no blend" in webpmux binary

Change-Id: I6d07b120626317df73f1a6f026931c5b9485a340
This commit is contained in:
Urvang Joshi 2013-08-26 18:04:52 -07:00
parent 3b80bc4859
commit e81fac86dd
3 changed files with 38 additions and 18 deletions

View File

@ -56,11 +56,12 @@ STRIP_OPTIONS:
FRAME_OPTIONS(i): FRAME_OPTIONS(i):
Create animation. Create animation.
file_i +di+xi+yi+mi file_i +di+[xi+yi[+mi[bi]]]
where: 'file_i' is the i'th animation frame (WebP format), where: 'file_i' is the i'th animation frame (WebP format),
'di' is the pause duration before next frame. 'di' is the pause duration before next frame.
'xi','yi' specify the image offset for this frame. 'xi','yi' specify the image offset for this frame.
'mi' is the dispose method for this frame (0 or 1). 'mi' is the dispose method for this frame (0 or 1).
'bi' is the blending method for this frame (+b or -b).
LOOP_COUNT: LOOP_COUNT:
Number of times to repeat the animation. Number of times to repeat the animation.

View File

@ -228,14 +228,17 @@ static WebPMuxError DisplayInfo(const WebPMux* mux) {
if (nFrames > 0) { if (nFrames > 0) {
int i; int i;
printf("No.: x_offset y_offset "); printf("No.: x_offset y_offset ");
if (is_anim) printf("duration dispose "); if (is_anim) printf("duration dispose blend ");
printf("image_size\n"); printf("image_size\n");
for (i = 1; i <= nFrames; i++) { for (i = 1; i <= nFrames; i++) {
WebPMuxFrameInfo frame; WebPMuxFrameInfo frame;
err = WebPMuxGetFrame(mux, i, &frame); err = WebPMuxGetFrame(mux, i, &frame);
if (err == WEBP_MUX_OK) { if (err == WEBP_MUX_OK) {
printf("%3d: %8d %8d ", i, frame.x_offset, frame.y_offset); printf("%3d: %8d %8d ", i, frame.x_offset, frame.y_offset);
if (is_anim) printf("%8d %7d ", frame.duration, frame.dispose_method); if (is_anim) {
printf("%8d %7d %5d", frame.duration, frame.dispose_method,
frame.blend_method);
}
printf("%10d\n", (int)frame.bitstream.size); printf("%10d\n", (int)frame.bitstream.size);
} }
WebPDataClear(&frame.bitstream); WebPDataClear(&frame.bitstream);
@ -333,11 +336,13 @@ static void PrintHelp(void) {
printf("\n"); printf("\n");
printf("FRAME_OPTIONS(i):\n"); printf("FRAME_OPTIONS(i):\n");
printf(" Create animation.\n"); printf(" Create animation.\n");
printf(" file_i +di+xi+yi+mi\n"); printf(" file_i +di+[xi+yi[+mi[bi]]]\n");
printf(" where: 'file_i' is the i'th animation frame (WebP format),\n"); printf(" where: 'file_i' is the i'th animation frame (WebP format),\n");
printf(" 'di' is the pause duration before next frame.\n"); printf(" 'di' is the pause duration before next frame.\n");
printf(" 'xi','yi' specify the image offset for this frame.\n"); printf(" 'xi','yi' specify the image offset for this frame.\n");
printf(" 'mi' is the dispose method for this frame (0 or 1).\n"); printf(" 'mi' is the dispose method for this frame (0 or 1).\n");
printf(" 'bi' is the blending method for this frame (+b or -b)."
"\n");
printf("\n"); printf("\n");
printf("LOOP_COUNT:\n"); printf("LOOP_COUNT:\n");
@ -414,24 +419,33 @@ static int WriteWebP(WebPMux* const mux, const char* filename) {
static int ParseFrameArgs(const char* args, WebPMuxFrameInfo* const info) { static int ParseFrameArgs(const char* args, WebPMuxFrameInfo* const info) {
int dispose_method, dummy; int dispose_method, dummy;
const int num_args = sscanf(args, "+%d+%d+%d+%d+%d", char plus_minus, blend_method;
&info->duration, &info->x_offset, &info->y_offset, const int num_args = sscanf(args, "+%d+%d+%d+%d%c%c+%d", &info->duration,
&dispose_method, &dummy); &info->x_offset, &info->y_offset, &dispose_method,
&plus_minus, &blend_method, &dummy);
switch (num_args) { switch (num_args) {
case 1: case 1:
info->x_offset = info->y_offset = 0; // fall through info->x_offset = info->y_offset = 0; // fall through
case 3: case 3:
dispose_method = 0; // fall through dispose_method = 0; // fall through
case 4: case 4:
plus_minus = '+';
blend_method = 'b'; // fall through
case 6:
break; break;
case 2:
case 5:
default: default:
return 0; return 0;
} }
// Note: The sanity of the following conversion is checked by // Note: The sanity of the following conversion is checked by
// WebPMuxSetAnimationParams(). // WebPMuxPushFrame().
info->dispose_method = (WebPMuxAnimDispose)dispose_method; info->dispose_method = (WebPMuxAnimDispose)dispose_method;
// TODO(urvang): Add support for parsing blending method too.
info->blend_method = WEBP_MUX_BLEND; if (blend_method != 'b') return 0;
if (plus_minus != '-' && plus_minus != '+') return 0;
info->blend_method =
(plus_minus == '+') ? WEBP_MUX_BLEND : WEBP_MUX_NO_BLEND;
return 1; return 1;
} }

View File

@ -1,5 +1,5 @@
.\" Hey, EMACS: -*- nroff -*- .\" Hey, EMACS: -*- nroff -*-
.TH WEBPMUX 1 "March 16, 2013" .TH WEBPMUX 1 "August 26, 2013"
.SH NAME .SH NAME
webpmux \- command line tool to create WebP Mux/container file. webpmux \- command line tool to create WebP Mux/container file.
.SH SYNOPSIS .SH SYNOPSIS
@ -92,12 +92,14 @@ Strip XMP metadata.
.SS FRAME_OPTIONS (\-frame) .SS FRAME_OPTIONS (\-frame)
.TP .TP
.I file_i +di[+xi+yi[+mi]] .I file_i +di[+xi+yi[+mi[bi]]]
Where: 'file_i' is the i'th frame (WebP format), 'xi','yi' specify the image Where: 'file_i' is the i'th frame (WebP format), 'xi','yi' specify the image
offset for this frame, 'di' is the pause duration before next frame and 'mi' is offset for this frame, 'di' is the pause duration before next frame, 'mi' is
the dispose method for this frame (0 for NONE or 1 for BACKGROUND). the dispose method for this frame (0 for NONE or 1 for BACKGROUND) and 'bi' is
'mi' can be omitted and will default to 0 (NONE). the blending method for this frame (+b for BLEND or -b for NO_BLEND).
Additionally, if 'mi' is ommitted then'xi' and 'yi' can be omitted and will Argument 'bi' can be omitted and will default to +b (BLEND).
Also, 'mi' can be omitted if 'bi' is omitted and will default to 0 (NONE).
Finally, if 'mi' and 'bi' are omitted then 'xi' and 'yi' can be omitted and will
default to +0+0. default to +0+0.
.TP .TP
.BI \-loop " n .BI \-loop " n
@ -149,10 +151,13 @@ webpmux \-get exif exif_container.webp \-o image_metadata.exif
.br .br
webpmux \-strip exif exif_container.webp \-o without_exif.webp webpmux \-strip exif exif_container.webp \-o without_exif.webp
.br .br
webpmux \-frame anim_1.webp +100 \-frame anim_2.webp +100+50+50 \-loop 10 webpmux \-frame anim_1.webp +100 \-frame anim_2.webp +100+50+50
.br .br
.RS 8 .RS 8
\-bgcolor 255,255,255,255 \-o anim_container.webp \-frame anim_2.webp +100+50+50+1+b \-loop 10 \-bgcolor 255,255,255,255
.br
.RS 8
\-o anim_container.webp
.RE .RE
.br .br
webpmux \-get frame 2 anim_container.webp \-o frame_2.webp webpmux \-get frame 2 anim_container.webp \-o frame_2.webp