| Index: third_party/libwebp/dec/io.c
|
| diff --git a/third_party/libwebp/dec/io.c b/third_party/libwebp/dec/io.c
|
| index 13e469ab733ca7f15c6d7b851b6cd74235755fb9..8d5c43f325d0b0d37ad67c8e4b0a7fb6e8af7488 100644
|
| --- a/third_party/libwebp/dec/io.c
|
| +++ b/third_party/libwebp/dec/io.c
|
| @@ -119,6 +119,14 @@ static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) {
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| +static void FillAlphaPlane(uint8_t* dst, int w, int h, int stride) {
|
| + int j;
|
| + for (j = 0; j < h; ++j) {
|
| + memset(dst, 0xff, w * sizeof(*dst));
|
| + dst += stride;
|
| + }
|
| +}
|
| +
|
| static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
|
| int expected_num_lines_out) {
|
| const uint8_t* alpha = io->a;
|
| @@ -137,10 +145,7 @@ static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
|
| }
|
| } else if (buf->a != NULL) {
|
| // the user requested alpha, but there is none, set it to opaque.
|
| - for (j = 0; j < mb_h; ++j) {
|
| - memset(dst, 0xff, mb_w * sizeof(*dst));
|
| - dst += buf->a_stride;
|
| - }
|
| + FillAlphaPlane(dst, mb_w, mb_h, buf->a_stride);
|
| }
|
| return 0;
|
| }
|
| @@ -269,8 +274,8 @@ static int EmitRescaledYUV(const VP8Io* const io, WebPDecParams* const p) {
|
|
|
| static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
|
| int expected_num_lines_out) {
|
| + const WebPYUVABuffer* const buf = &p->output->u.YUVA;
|
| if (io->a != NULL) {
|
| - const WebPYUVABuffer* const buf = &p->output->u.YUVA;
|
| uint8_t* dst_y = buf->y + p->last_y * buf->y_stride;
|
| const uint8_t* src_a = buf->a + p->last_y * buf->a_stride;
|
| const int num_lines_out = Rescale(io->a, io->width, io->mb_h, &p->scaler_a);
|
| @@ -280,6 +285,11 @@ static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
|
| WebPMultRows(dst_y, buf->y_stride, src_a, buf->a_stride,
|
| p->scaler_a.dst_width, num_lines_out, 1);
|
| }
|
| + } else if (buf->a != NULL) {
|
| + // the user requested alpha, but there is none, set it to opaque.
|
| + assert(p->last_y + expected_num_lines_out <= io->scaled_height);
|
| + FillAlphaPlane(buf->a + p->last_y * buf->a_stride,
|
| + io->scaled_width, expected_num_lines_out, buf->a_stride);
|
| }
|
| return 0;
|
| }
|
|
|