blob: 72363f59fe930147a32093c391fc2b985ac8aaaa [file] [log] [blame]
msaretta5783ae2015-09-08 15:35:32 -07001/*
2 * Copyright 2015 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
msarett26ad17b2015-10-22 07:29:19 -07008#include "SkBitmapRegionCodec.h"
msarett5cb48852015-11-06 08:56:32 -08009#include "SkBitmapRegionDecoder.h"
msarett26ad17b2015-10-22 07:29:19 -070010#include "SkAndroidCodec.h"
scroggo46c57472015-09-30 08:57:13 -070011#include "SkCodec.h"
msarett04965c62015-10-12 10:24:38 -070012#include "SkCodecPriv.h"
msaretta5783ae2015-09-08 15:35:32 -070013
msarett5cb48852015-11-06 08:56:32 -080014SkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
reed42943c82016-09-12 12:01:44 -070015 sk_sp<SkData> data, Strategy strategy) {
msarett5cb48852015-11-06 08:56:32 -080016 return SkBitmapRegionDecoder::Create(new SkMemoryStream(data),
msarett3f65e932015-10-27 13:12:59 -070017 strategy);
18}
19
msarett5cb48852015-11-06 08:56:32 -080020SkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
msarett3f65e932015-10-27 13:12:59 -070021 SkStreamRewindable* stream, Strategy strategy) {
Ben Wagner145dbcd2016-11-03 14:40:50 -040022 std::unique_ptr<SkStreamRewindable> streamDeleter(stream);
msaretta5783ae2015-09-08 15:35:32 -070023 switch (strategy) {
msarett26ad17b2015-10-22 07:29:19 -070024 case kAndroidCodec_Strategy: {
Mike Reedede7bac2017-07-23 15:30:02 -040025 auto codec = SkAndroidCodec::MakeFromStream(std::move(streamDeleter));
msarett73d882e2015-11-16 13:30:20 -080026 if (nullptr == codec) {
msarett26ad17b2015-10-22 07:29:19 -070027 SkCodecPrintf("Error: Failed to create codec.\n");
Mike Reedede7bac2017-07-23 15:30:02 -040028 return nullptr;
msarett26ad17b2015-10-22 07:29:19 -070029 }
msarett73d882e2015-11-16 13:30:20 -080030
Hal Canarydb683012016-11-23 08:55:18 -070031 switch ((SkEncodedImageFormat)codec->getEncodedFormat()) {
32 case SkEncodedImageFormat::kJPEG:
33 case SkEncodedImageFormat::kPNG:
34 case SkEncodedImageFormat::kWEBP:
Leon Scroggins III04be2b52017-08-17 15:13:20 -040035 case SkEncodedImageFormat::kHEIF:
msarett73d882e2015-11-16 13:30:20 -080036 break;
37 default:
38 return nullptr;
39 }
40
mtklein18300a32016-03-16 13:53:35 -070041 return new SkBitmapRegionCodec(codec.release());
msarett26ad17b2015-10-22 07:29:19 -070042 }
msaretta5783ae2015-09-08 15:35:32 -070043 default:
44 SkASSERT(false);
45 return nullptr;
46 }
47}