1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2020 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef SkCompressedDataUtils_DEFINED 9cb93a386Sopenharmony_ci#define SkCompressedDataUtils_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkImage.h" 12cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 13cb93a386Sopenharmony_ci#include "include/core/SkSize.h" 14cb93a386Sopenharmony_ci#include "include/private/SkTArray.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ciclass SkBitmap; 17cb93a386Sopenharmony_ciclass SkData; 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_cistatic constexpr bool SkCompressionTypeIsOpaque(SkImage::CompressionType compression) { 20cb93a386Sopenharmony_ci switch (compression) { 21cb93a386Sopenharmony_ci case SkImage::CompressionType::kNone: return true; 22cb93a386Sopenharmony_ci case SkImage::CompressionType::kETC2_RGB8_UNORM: return true; 23cb93a386Sopenharmony_ci case SkImage::CompressionType::kBC1_RGB8_UNORM: return true; 24cb93a386Sopenharmony_ci case SkImage::CompressionType::kBC1_RGBA8_UNORM: return false; 25cb93a386Sopenharmony_ci case SkImage::CompressionType::kASTC_RGBA8_4x4: return false; 26cb93a386Sopenharmony_ci case SkImage::CompressionType::kASTC_RGBA8_6x6: return false; 27cb93a386Sopenharmony_ci case SkImage::CompressionType::kASTC_RGBA8_8x8: return false; 28cb93a386Sopenharmony_ci } 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci SkUNREACHABLE; 31cb93a386Sopenharmony_ci} 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_cisize_t SK_API SkCompressedDataSize(SkImage::CompressionType, SkISize baseDimensions, 34cb93a386Sopenharmony_ci SkTArray<size_t>* individualMipOffsets, bool mipMapped); 35cb93a386Sopenharmony_cisize_t SkCompressedBlockSize(SkImage::CompressionType type); 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ci/** 38cb93a386Sopenharmony_ci * Returns the data size for the given SkImage::CompressionType 39cb93a386Sopenharmony_ci */ 40cb93a386Sopenharmony_cisize_t SkCompressedFormatDataSize(SkImage::CompressionType compressionType, 41cb93a386Sopenharmony_ci SkISize dimensions, bool mipMapped); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci /* 44cb93a386Sopenharmony_ci * This method will decompress the bottommost level in 'data' into 'dst'. 45cb93a386Sopenharmony_ci */ 46cb93a386Sopenharmony_cibool SkDecompress(sk_sp<SkData> data, 47cb93a386Sopenharmony_ci SkISize dimensions, 48cb93a386Sopenharmony_ci SkImage::CompressionType compressionType, 49cb93a386Sopenharmony_ci SkBitmap* dst); 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci#endif 52