/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkCodec_DEFINED #define SkCodec_DEFINED #include "include/codec/SkEncodedOrigin.h" #include "include/core/SkImageInfo.h" #include "include/core/SkPixmap.h" #include "include/core/SkRect.h" #include "include/core/SkRefCnt.h" #include "include/core/SkSize.h" #include "include/core/SkSpan.h" #include "include/core/SkTypes.h" #include "include/core/SkYUVAPixmaps.h" #include "include/private/SkEncodedInfo.h" #include "include/private/base/SkNoncopyable.h" #include "modules/skcms/skcms.h" #include <cstddef> #include <functional> #include <memory> #include <optional> #include <string_view> #include <tuple> #include <vector> class SkData; class SkFrameHolder; class SkImage; class SkPngChunkReader; class SkSampler; class SkStream; struct SkGainmapInfo; enum SkAlphaType : int; enum class SkEncodedImageFormat; namespace SkCodecAnimation { enum class Blend; enum class DisposalMethod; } namespace DM { class CodecSrc; } // namespace DM namespace SkCodecs { struct Decoder; } /** * Abstraction layer directly on top of an image codec. */ class SK_API SkCodec : SkNoncopyable { … }; namespace SkCodecs { DecodeContext; IsFormatCallback; MakeFromStreamCallback; struct SK_API Decoder { … }; // Add the decoder to the end of a linked list of decoders, which will be used to identify calls to // SkCodec::MakeFromStream. If a decoder with the same id already exists, this new decoder // will replace the existing one (in the same position). This is not thread-safe, so make sure all // initialization is done before the first call. void SK_API Register(Decoder d); /** * Return a SkImage produced by the codec, but attempts to defer image allocation until the * image is actually used/drawn. This deferral allows the system to cache the result, either on the * CPU or on the GPU, depending on where the image is drawn. If memory is low, the cache may * be purged, causing the next draw of the image to have to re-decode. * * If alphaType is nullopt, the image's alpha type will be chosen automatically based on the * image format. Transparent images will default to kPremul_SkAlphaType. If alphaType contains * kPremul_SkAlphaType or kUnpremul_SkAlphaType, that alpha type will be used. Forcing opaque * (passing kOpaque_SkAlphaType) is not allowed, and will return nullptr. * * @param codec A non-null codec (e.g. from SkPngDecoder::Decode) * @return created SkImage, or nullptr */ SK_API sk_sp<SkImage> DeferredImage(std::unique_ptr<SkCodec> codec, std::optional<SkAlphaType> alphaType = std::nullopt); } #endif // SkCodec_DEFINED