/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "include/codec/SkCodec.h" #include "include/core/SkAlphaType.h" #include "include/core/SkData.h" #include "include/core/SkGraphics.h" #include "include/core/SkImage.h" #include "include/core/SkImageGenerator.h" #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include "src/codec/SkCodecImageGenerator.h" #include "src/image/SkImageGeneratorPriv.h" #include #include #include static SkGraphics::ImageGeneratorFromEncodedDataFactory gFactory; SkGraphics::ImageGeneratorFromEncodedDataFactory SkGraphics::SetImageGeneratorFromEncodedDataFactory(ImageGeneratorFromEncodedDataFactory factory) { ImageGeneratorFromEncodedDataFactory prev = gFactory; gFactory = factory; return prev; } namespace SkImageGenerators { std::unique_ptr MakeFromEncoded(sk_sp data, std::optional at) { if (!data || at == kOpaque_SkAlphaType) { return nullptr; } if (gFactory) { if (std::unique_ptr generator = gFactory(data)) { return generator; } } return SkCodecImageGenerator::MakeFromEncodedCodec(std::move(data), at); } } // namespace SkImageGenerators namespace SkImages { sk_sp DeferredFromEncodedData(sk_sp encoded, std::optional alphaType) { if (nullptr == encoded || encoded->isEmpty()) { return nullptr; } return DeferredFromGenerator(SkImageGenerators::MakeFromEncoded(std::move(encoded), alphaType)); } } // namespace SkImages namespace SkCodecs { sk_sp DeferredImage(std::unique_ptr codec, std::optional alphaType) { return SkImages::DeferredFromGenerator( SkCodecImageGenerator::MakeFromCodec(std::move(codec), alphaType)); } } // namespace SkCodecs