Chromium Code Reviews| 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..b05dfad01c48f3961b82a8c6618c3890ad19d97f 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,20 @@ 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); |
| + std::unique_ptr<BlobCacheImageMetadata> parsed_metadata( |
|
vmpstr
2016/04/15 18:18:54
Since this seems to be only used locally, can you
nyquist
2016/04/16 00:25:29
Done.
|
| + new BlobCacheImageMetadata); |
| + 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, |