1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/child/image_decoder.h"
6
7#include "content/public/child/image_decoder_utils.h"
8#include "third_party/WebKit/public/platform/WebData.h"
9#include "third_party/WebKit/public/platform/WebImage.h"
10#include "third_party/WebKit/public/platform/WebSize.h"
11#include "third_party/skia/include/core/SkBitmap.h"
12
13using blink::WebData;
14using blink::WebImage;
15
16namespace content {
17
18SkBitmap DecodeImage(const unsigned char* data,
19                     const gfx::Size& desired_image_size,
20                     size_t size) {
21  ImageDecoder decoder(desired_image_size);
22  return decoder.Decode(data, size);
23}
24
25ImageDecoder::ImageDecoder() : desired_icon_size_(0, 0) {
26}
27
28ImageDecoder::ImageDecoder(const gfx::Size& desired_icon_size)
29    : desired_icon_size_(desired_icon_size) {
30}
31
32ImageDecoder::~ImageDecoder() {
33}
34
35SkBitmap ImageDecoder::Decode(const unsigned char* data, size_t size) const {
36  const WebImage& image = WebImage::fromData(
37      WebData(reinterpret_cast<const char*>(data), size), desired_icon_size_);
38  return image.getSkBitmap();
39}
40
41// static
42std::vector<SkBitmap> ImageDecoder::DecodeAll(
43      const unsigned char* data, size_t size) {
44  const blink::WebVector<WebImage>& images = WebImage::framesFromData(
45      WebData(reinterpret_cast<const char*>(data), size));
46  std::vector<SkBitmap> result;
47  for (size_t i = 0; i < images.size(); ++i)
48    result.push_back(images[i].getSkBitmap());
49  return result;
50}
51
52}  // namespace content
53