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 "SkBitmapRegionCodec.h" 9#include "SkBitmapRegionDecoder.h" 10#include "SkAndroidCodec.h" 11#include "SkCodec.h" 12#include "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 std::unique_ptr<SkAndroidCodec> codec( 26 SkAndroidCodec::NewFromStream(streamDeleter.release())); 27 if (nullptr == codec) { 28 SkCodecPrintf("Error: Failed to create codec.\n"); 29 return NULL; 30 } 31 32 switch ((SkEncodedImageFormat)codec->getEncodedFormat()) { 33 case SkEncodedImageFormat::kJPEG: 34 case SkEncodedImageFormat::kPNG: 35 case SkEncodedImageFormat::kWEBP: 36 case SkEncodedImageFormat::kHEIF: 37 break; 38 default: 39 return nullptr; 40 } 41 42 return new SkBitmapRegionCodec(codec.release()); 43 } 44 default: 45 SkASSERT(false); 46 return nullptr; 47 } 48} 49