| Index: third_party/libwebp/dec/vp8.c
|
| diff --git a/third_party/libwebp/dec/vp8.c b/third_party/libwebp/dec/vp8.c
|
| index d89eb1c59e38a4b43d35c0ee17147332e45276fc..336680c38c03bc3f52fe79f02b9dc115a18c7a5f 100644
|
| --- a/third_party/libwebp/dec/vp8.c
|
| +++ b/third_party/libwebp/dec/vp8.c
|
| @@ -50,7 +50,7 @@ VP8Decoder* VP8New(void) {
|
| SetOk(dec);
|
| WebPGetWorkerInterface()->Init(&dec->worker_);
|
| dec->ready_ = 0;
|
| - dec->num_parts_ = 1;
|
| + dec->num_parts_minus_one_ = 0;
|
| }
|
| return dec;
|
| }
|
| @@ -194,8 +194,8 @@ static VP8StatusCode ParsePartitions(VP8Decoder* const dec,
|
| size_t last_part;
|
| size_t p;
|
|
|
| - dec->num_parts_ = 1 << VP8GetValue(br, 2);
|
| - last_part = dec->num_parts_ - 1;
|
| + dec->num_parts_minus_one_ = (1 << VP8GetValue(br, 2)) - 1;
|
| + last_part = dec->num_parts_minus_one_;
|
| if (size < 3 * last_part) {
|
| // we can't even read the sizes with sz[]! That's a failure.
|
| return VP8_STATUS_NOT_ENOUGH_DATA;
|
| @@ -303,15 +303,22 @@ int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) {
|
|
|
| dec->mb_w_ = (pic_hdr->width_ + 15) >> 4;
|
| dec->mb_h_ = (pic_hdr->height_ + 15) >> 4;
|
| +
|
| // Setup default output area (can be later modified during io->setup())
|
| io->width = pic_hdr->width_;
|
| io->height = pic_hdr->height_;
|
| - io->use_scaling = 0;
|
| + // IMPORTANT! use some sane dimensions in crop_* and scaled_* fields.
|
| + // So they can be used interchangeably without always testing for
|
| + // 'use_cropping'.
|
| io->use_cropping = 0;
|
| io->crop_top = 0;
|
| io->crop_left = 0;
|
| io->crop_right = io->width;
|
| io->crop_bottom = io->height;
|
| + io->use_scaling = 0;
|
| + io->scaled_width = io->width;
|
| + io->scaled_height = io->height;
|
| +
|
| io->mb_w = io->width; // sanity check
|
| io->mb_h = io->height; // ditto
|
|
|
| @@ -579,7 +586,7 @@ static int ParseFrame(VP8Decoder* const dec, VP8Io* io) {
|
| for (dec->mb_y_ = 0; dec->mb_y_ < dec->br_mb_y_; ++dec->mb_y_) {
|
| // Parse bitstream for this row.
|
| VP8BitReader* const token_br =
|
| - &dec->parts_[dec->mb_y_ & (dec->num_parts_ - 1)];
|
| + &dec->parts_[dec->mb_y_ & dec->num_parts_minus_one_];
|
| if (!VP8ParseIntraModeRow(&dec->br_, dec)) {
|
| return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA,
|
| "Premature end-of-partition0 encountered.");
|
| @@ -649,8 +656,7 @@ void VP8Clear(VP8Decoder* const dec) {
|
| return;
|
| }
|
| WebPGetWorkerInterface()->End(&dec->worker_);
|
| - ALPHDelete(dec->alph_dec_);
|
| - dec->alph_dec_ = NULL;
|
| + WebPDeallocateAlphaMemory(dec);
|
| WebPSafeFree(dec->mem_);
|
| dec->mem_ = NULL;
|
| dec->mem_size_ = 0;
|
| @@ -659,4 +665,3 @@ void VP8Clear(VP8Decoder* const dec) {
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
| -
|
|
|