1a5783aeff042ccaf517e50dee3660a4925f5f694msarett/*
2a5783aeff042ccaf517e50dee3660a4925f5f694msarett * Copyright 2015 Google Inc.
3a5783aeff042ccaf517e50dee3660a4925f5f694msarett *
4a5783aeff042ccaf517e50dee3660a4925f5f694msarett * Use of this source code is governed by a BSD-style license that can be
5a5783aeff042ccaf517e50dee3660a4925f5f694msarett * found in the LICENSE file.
6a5783aeff042ccaf517e50dee3660a4925f5f694msarett */
7a5783aeff042ccaf517e50dee3660a4925f5f694msarett
826ad17b8f872fc8bc18df7f49067edbd8b9799e8msarett#include "SkBitmapRegionCodec.h"
95cb4885b4cd1ac5eb3fc92dac5f5509d7c810464msarett#include "SkBitmapRegionDecoder.h"
1026ad17b8f872fc8bc18df7f49067edbd8b9799e8msarett#include "SkAndroidCodec.h"
1146c574725676b26ada63ac15e42cda309dcd5090scroggo#include "SkCodec.h"
1204965c6f112565c02926bc9a230e6da5f400d07amsarett#include "SkCodecPriv.h"
13a5783aeff042ccaf517e50dee3660a4925f5f694msarett
145cb4885b4cd1ac5eb3fc92dac5f5509d7c810464msarettSkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
1542943c8aa9c611c18ad0f1a30a27669f3d82239creed        sk_sp<SkData> data, Strategy strategy) {
165cb4885b4cd1ac5eb3fc92dac5f5509d7c810464msarett    return SkBitmapRegionDecoder::Create(new SkMemoryStream(data),
173f65e93b19027e61a640a8f421dcd745146446f7msarett            strategy);
183f65e93b19027e61a640a8f421dcd745146446f7msarett}
193f65e93b19027e61a640a8f421dcd745146446f7msarett
205cb4885b4cd1ac5eb3fc92dac5f5509d7c810464msarettSkBitmapRegionDecoder* SkBitmapRegionDecoder::Create(
213f65e93b19027e61a640a8f421dcd745146446f7msarett        SkStreamRewindable* stream, Strategy strategy) {
22145dbcd165d9d27298eb8888bc240e2d06a95464Ben Wagner    std::unique_ptr<SkStreamRewindable> streamDeleter(stream);
23a5783aeff042ccaf517e50dee3660a4925f5f694msarett    switch (strategy) {
2426ad17b8f872fc8bc18df7f49067edbd8b9799e8msarett        case kAndroidCodec_Strategy: {
25ede7bac43fbc69b9fdf1c178890ba6353f5bb140Mike Reed            auto codec = SkAndroidCodec::MakeFromStream(std::move(streamDeleter));
2673d882e13fc54ff9ecc53a83838c2d900ebf8397msarett            if (nullptr == codec) {
2726ad17b8f872fc8bc18df7f49067edbd8b9799e8msarett                SkCodecPrintf("Error: Failed to create codec.\n");
28ede7bac43fbc69b9fdf1c178890ba6353f5bb140Mike Reed                return nullptr;
2926ad17b8f872fc8bc18df7f49067edbd8b9799e8msarett            }
3073d882e13fc54ff9ecc53a83838c2d900ebf8397msarett
31db6830162eca5b94e61d9825ec93306fc615d204Hal Canary            switch ((SkEncodedImageFormat)codec->getEncodedFormat()) {
32db6830162eca5b94e61d9825ec93306fc615d204Hal Canary                case SkEncodedImageFormat::kJPEG:
33db6830162eca5b94e61d9825ec93306fc615d204Hal Canary                case SkEncodedImageFormat::kPNG:
34db6830162eca5b94e61d9825ec93306fc615d204Hal Canary                case SkEncodedImageFormat::kWEBP:
3504be2b54ba07a076d59bea7dcbd063641010d77dLeon Scroggins III                case SkEncodedImageFormat::kHEIF:
3673d882e13fc54ff9ecc53a83838c2d900ebf8397msarett                    break;
3773d882e13fc54ff9ecc53a83838c2d900ebf8397msarett                default:
3873d882e13fc54ff9ecc53a83838c2d900ebf8397msarett                    return nullptr;
3973d882e13fc54ff9ecc53a83838c2d900ebf8397msarett            }
4073d882e13fc54ff9ecc53a83838c2d900ebf8397msarett
4118300a3aa7cb6eb55d21bb0450dffa58b6fc062cmtklein            return new SkBitmapRegionCodec(codec.release());
4226ad17b8f872fc8bc18df7f49067edbd8b9799e8msarett        }
43a5783aeff042ccaf517e50dee3660a4925f5f694msarett        default:
44a5783aeff042ccaf517e50dee3660a4925f5f694msarett            SkASSERT(false);
45a5783aeff042ccaf517e50dee3660a4925f5f694msarett            return nullptr;
46a5783aeff042ccaf517e50dee3660a4925f5f694msarett    }
47a5783aeff042ccaf517e50dee3660a4925f5f694msarett}
48