1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2015 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBitmapRegionCodec.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBitmapRegionDecoder.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkAndroidCodec.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCodec.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCodecPriv.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        sk_sp<SkData> data, Strategy strategy) {
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return SkBitmapRegionDecoder::Create(new SkMemoryStream(data),
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            strategy);
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkStreamRewindable* stream, Strategy strategy) {
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<SkStreamRewindable> streamDeleter(stream);
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    switch (strategy) {
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        case kAndroidCodec_Strategy: {
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            auto codec = SkAndroidCodec::MakeFromStream(std::move(streamDeleter));
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            if (nullptr == codec) {
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                SkCodecPrintf("Error: Failed to create codec.\n");
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                return nullptr;
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            switch ((SkEncodedImageFormat)codec->getEncodedFormat()) {
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                case SkEncodedImageFormat::kJPEG:
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                case SkEncodedImageFormat::kPNG:
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                case SkEncodedImageFormat::kWEBP:
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                case SkEncodedImageFormat::kHEIF:
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    break;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                default:
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    return nullptr;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return new SkBitmapRegionCodec(codec.release());
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        default:
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SkASSERT(false);
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            return nullptr;
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
48