/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkBitmapRegionCodec.h" #include "SkBitmapRegionDecoder.h" #include "SkAndroidCodec.h" #include "SkCodec.h" #include "SkCodecPriv.h" SkBitmapRegionDecoder* SkBitmapRegionDecoder::Create( sk_sp data, Strategy strategy) { return SkBitmapRegionDecoder::Create(new SkMemoryStream(data), strategy); } SkBitmapRegionDecoder* SkBitmapRegionDecoder::Create( SkStreamRewindable* stream, Strategy strategy) { std::unique_ptr streamDeleter(stream); switch (strategy) { case kAndroidCodec_Strategy: { auto codec = SkAndroidCodec::MakeFromStream(std::move(streamDeleter)); if (nullptr == codec) { SkCodecPrintf("Error: Failed to create codec.\n"); return nullptr; } switch ((SkEncodedImageFormat)codec->getEncodedFormat()) { case SkEncodedImageFormat::kJPEG: case SkEncodedImageFormat::kPNG: case SkEncodedImageFormat::kWEBP: case SkEncodedImageFormat::kHEIF: break; default: return nullptr; } return new SkBitmapRegionCodec(codec.release()); } default: SkASSERT(false); return nullptr; } }