1/*
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
8#include "include/android/SkBitmapRegionDecoder.h"
9#include "include/codec/SkAndroidCodec.h"
10#include "include/codec/SkCodec.h"
11#include "src/android/SkBitmapRegionCodec.h"
12#include "src/codec/SkCodecPriv.h"
13
14SkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
15 sk_sp<SkData> data, Strategy strategy) {
16 return SkBitmapRegionDecoder::Create(new SkMemoryStream(data),
17 strategy);
18}
19
20SkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
21 SkStreamRewindable* stream, Strategy strategy) {
22 std::unique_ptr<SkStreamRewindable> streamDeleter(stream);
23 switch (strategy) {
24 case kAndroidCodec_Strategy: {
25 auto codec = SkAndroidCodec::MakeFromStream(std::move(streamDeleter));
26 if (nullptr == codec) {
27 SkCodecPrintf("Error: Failed to create codec.\n");
28 return nullptr;
29 }
30
31 switch ((SkEncodedImageFormat)codec->getEncodedFormat()) {
32 case SkEncodedImageFormat::kJPEG:
33 case SkEncodedImageFormat::kPNG:
34 case SkEncodedImageFormat::kWEBP:
35 case SkEncodedImageFormat::kHEIF:
36 break;
37 default:
38 return nullptr;
39 }
40
41 return new SkBitmapRegionCodec(codec.release());
42 }
43 default:
44 SkASSERT(false);
45 return nullptr;
46 }
47}
48