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