blob: 05651c78c29e2f67af1b568846f2bfd24fb9727e [file] [log] [blame]
halcanary@google.comad04eb42013-11-21 15:32:08 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkDecodingImageGenerator.h"
halcanary@google.comad04eb42013-11-21 15:32:08 +00009#include "SkData.h"
10#include "SkDiscardablePixelRef.h"
11#include "SkImageDecoder.h"
12
13SkDecodingImageGenerator::SkDecodingImageGenerator(SkData* data)
14 : fData(data) {
15 SkASSERT(fData != NULL);
16 fData->ref();
17}
18
19SkDecodingImageGenerator::~SkDecodingImageGenerator() {
20 fData->unref();
21}
22
23SkData* SkDecodingImageGenerator::refEncodedData() {
halcanary@google.com2c7c7ee2013-12-05 18:31:42 +000024 // This functionality is used in `gm --serialize`
halcanary@google.comad04eb42013-11-21 15:32:08 +000025 fData->ref();
26 return fData;
27}
28
29bool SkDecodingImageGenerator::getInfo(SkImageInfo* info) {
30 SkASSERT(info != NULL);
31 return SkImageDecoder::DecodeMemoryToTarget(fData->data(),
32 fData->size(),
33 info, NULL);
34}
35
36bool SkDecodingImageGenerator::getPixels(const SkImageInfo& info,
37 void* pixels,
38 size_t rowBytes) {
39 SkASSERT(pixels != NULL);
halcanary@google.com2c7c7ee2013-12-05 18:31:42 +000040 SkImageDecoder::Target target = {pixels, rowBytes};
halcanary@google.comad04eb42013-11-21 15:32:08 +000041 SkImageInfo tmpInfo = info;
42 return SkImageDecoder::DecodeMemoryToTarget(fData->data(),
43 fData->size(),
44 &tmpInfo, &target);
45}
halcanary@google.com2c7c7ee2013-12-05 18:31:42 +000046bool SkDecodingImageGenerator::Install(SkData* data, SkBitmap* dst,
47 SkDiscardableMemory::Factory* factory) {
halcanary@google.comad04eb42013-11-21 15:32:08 +000048 SkASSERT(data != NULL);
49 SkASSERT(dst != NULL);
50 SkImageGenerator* gen(SkNEW_ARGS(SkDecodingImageGenerator, (data)));
halcanary@google.com2c7c7ee2013-12-05 18:31:42 +000051 return SkDiscardablePixelRef::Install(gen, dst, factory);
halcanary@google.comad04eb42013-11-21 15:32:08 +000052}