| Index: blimp/client/feature/compositor/decoding_image_generator.cc
|
| diff --git a/blimp/client/feature/compositor/decoding_image_generator.cc b/blimp/client/feature/compositor/decoding_image_generator.cc
|
| index 692dd373c4df152e1de69054ca0deef64b44f5bd..5ceab09e2085793293b223b82b0325d29cec6ce0 100644
|
| --- a/blimp/client/feature/compositor/decoding_image_generator.cc
|
| +++ b/blimp/client/feature/compositor/decoding_image_generator.cc
|
| @@ -4,7 +4,9 @@
|
|
|
| #include "blimp/client/feature/compositor/decoding_image_generator.h"
|
|
|
| +#include "base/numerics/safe_conversions.h"
|
| #include "blimp/common/compositor/webp_decoder.h"
|
| +#include "blimp/common/proto/blob_cache.pb.h"
|
| #include "third_party/libwebp/webp/decode.h"
|
| #include "third_party/libwebp/webp/demux.h"
|
| #include "third_party/skia/include/core/SkData.h"
|
| @@ -13,16 +15,19 @@ namespace blimp {
|
| namespace client {
|
|
|
| SkImageGenerator* DecodingImageGenerator::create(SkData* data) {
|
| - WebPData inputData = {reinterpret_cast<const uint8_t*>(data->data()),
|
| - data->size()};
|
| - WebPDemuxState demuxState(WEBP_DEMUX_PARSING_HEADER);
|
| - WebPDemuxer* demux = WebPDemuxPartial(&inputData, &demuxState);
|
| -
|
| - uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
|
| - uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
|
| + BlobCacheImageMetadata parsed_metadata;
|
| + int signed_size = base::checked_cast<int>(data->size());
|
| + if (!parsed_metadata.ParseFromArray(data->data(), signed_size)) {
|
| + // Failed to parse proto, so will fail to decode later as well. Inform
|
| + // Skia by giving back an empty SkImageInfo.
|
| + return new DecodingImageGenerator(SkImageInfo::MakeN32Premul(0, 0),
|
| + data->data(), data->size());
|
| + }
|
|
|
| - const SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
|
| - return new DecodingImageGenerator(info, data->data(), data->size());
|
| + return new DecodingImageGenerator(
|
| + SkImageInfo::MakeN32Premul(parsed_metadata.width(),
|
| + parsed_metadata.height()),
|
| + data->data(), data->size());
|
| }
|
|
|
| DecodingImageGenerator::DecodingImageGenerator(const SkImageInfo info,
|
|
|