aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkImageInfoPriv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkImageInfoPriv.h')
-rw-r--r--src/core/SkImageInfoPriv.h179
1 files changed, 0 insertions, 179 deletions
diff --git a/src/core/SkImageInfoPriv.h b/src/core/SkImageInfoPriv.h
deleted file mode 100644
index 04779ff3fb..0000000000
--- a/src/core/SkImageInfoPriv.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkImageInfoPriv_DEFINED
-#define SkImageInfoPriv_DEFINED
-
-#include "SkImageInfo.h"
-
-enum class SkDestinationSurfaceColorMode {
- kLegacy,
- kGammaAndColorSpaceAware,
-};
-
-static inline bool SkAlphaTypeIsValid(unsigned value) {
- return value <= kLastEnum_SkAlphaType;
-}
-
-static int SkColorTypeShiftPerPixel(SkColorType ct) {
- switch (ct) {
- case kUnknown_SkColorType: return 0;
- case kAlpha_8_SkColorType: return 0;
- case kRGB_565_SkColorType: return 1;
- case kARGB_4444_SkColorType: return 1;
- case kRGBA_8888_SkColorType: return 2;
- case kRGB_888x_SkColorType: return 2;
- case kBGRA_8888_SkColorType: return 2;
- case kRGBA_1010102_SkColorType: return 2;
- case kRGB_101010x_SkColorType: return 2;
- case kGray_8_SkColorType: return 0;
- case kRGBA_F16_SkColorType: return 3;
- }
- return 0;
-}
-
-static inline size_t SkColorTypeMinRowBytes(SkColorType ct, int width) {
- return width * SkColorTypeBytesPerPixel(ct);
-}
-
-static inline bool SkColorTypeIsValid(unsigned value) {
- return value <= kLastEnum_SkColorType;
-}
-
-static inline size_t SkColorTypeComputeOffset(SkColorType ct, int x, int y, size_t rowBytes) {
- if (kUnknown_SkColorType == ct) {
- return 0;
- }
- return y * rowBytes + (x << SkColorTypeShiftPerPixel(ct));
-}
-
-/**
- * This contains shared checks on SkImageInfo. Depending on the desired color space behavior,
- * the caller should choose one of the two versions below.
- */
-static inline bool SkImageInfoIsValidCommon(const SkImageInfo& info) {
- if (info.width() <= 0 || info.height() <= 0) {
- return false;
- }
-
- const int kMaxDimension = SK_MaxS32 >> 2;
- if (info.width() > kMaxDimension || info.height() > kMaxDimension) {
- return false;
- }
-
- if (kUnknown_SkColorType == info.colorType() || kUnknown_SkAlphaType == info.alphaType()) {
- return false;
- }
-
- if (kOpaque_SkAlphaType != info.alphaType() &&
- (kRGB_565_SkColorType == info.colorType() || kGray_8_SkColorType == info.colorType())) {
- return false;
- }
-
- if (kRGBA_F16_SkColorType == info.colorType() &&
- (info.colorSpace() && (!info.colorSpace()->gammaIsLinear()))) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Returns true if |info| contains a valid combination of width, height, colorType, alphaType,
- * colorSpace. Allows numerical color spaces. Returns false otherwise.
- */
-static inline bool SkImageInfoIsValidAllowNumericalCS(const SkImageInfo& info) {
- if (!SkImageInfoIsValidCommon(info)) {
- return false;
- }
-
- SkColorSpaceTransferFn fn;
- if (info.colorSpace() && !info.colorSpace()->isNumericalTransferFn(&fn)) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Returns true if |info| contains a valid combination of width, height, colorType, alphaType,
- * colorSpace. Only supports rendering color spaces. Returns false otherwise.
- */
-static inline bool SkImageInfoIsValidRenderingCS(const SkImageInfo& info) {
- if (!SkImageInfoIsValidCommon(info)) {
- return false;
- }
-
- if (info.colorSpace() &&
- (!info.colorSpace()->gammaCloseToSRGB() && !info.colorSpace()->gammaIsLinear())) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Returns true if |info| contains a valid combination of width, height, colorType, alphaType,
- * colorSpace. Uses |colorMode| to decide how to treat color spaces.
- */
-static inline bool SkImageInfoIsValid(const SkImageInfo& info,
- SkDestinationSurfaceColorMode colorMode) {
- if (SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware == colorMode) {
- return SkImageInfoIsValidRenderingCS(info);
- }
-
- return SkImageInfoIsValidAllowNumericalCS(info);
-}
-
-/**
- * Returns true if Skia has defined a pixel conversion from the |src| to the |dst|.
- * Returns false otherwise. Some discussion of false cases:
- * We will not convert to kIndex8 unless it exactly matches the src, since color tables
- * are immutable.
- * We do not convert to kGray8 when the |src| is not kGray8 in the same color space.
- * We may add this feature - it just requires some work to convert to luminance while
- * handling color spaces correctly. Currently no one is asking for this.
- * We will not convert from kAlpha8 when the |dst| is not kAlpha8. This would require
- * inventing color information.
- * We will not convert to kOpaque when the |src| is not kOpaque. This could be
- * implemented to set all the alpha values to 1, but there is still some ambiguity -
- * should we use kPremul or kUnpremul color values with the opaque alphas? Or should
- * we just use whatever the |src| alpha is? In the future, we could choose to clearly
- * define this, but currently no one is asking for this feature.
- * We will not convert to a particular color space if |src| is nullptr. The color space
- * conversion is not well-defined.
- */
-static inline bool SkImageInfoValidConversion(const SkImageInfo& dst, const SkImageInfo& src) {
- if (!SkImageInfoIsValidAllowNumericalCS(dst) || !SkImageInfoIsValidAllowNumericalCS(src)) {
- return false;
- }
-
- if (kGray_8_SkColorType == dst.colorType()) {
- if (kGray_8_SkColorType != src.colorType()) {
- return false;
- }
-
- if (dst.colorSpace() && !SkColorSpace::Equals(dst.colorSpace(), src.colorSpace())) {
- return false;
- }
- }
-
- if (kAlpha_8_SkColorType != dst.colorType() && kAlpha_8_SkColorType == src.colorType()) {
- return false;
- }
-
- if (kOpaque_SkAlphaType == dst.alphaType() && kOpaque_SkAlphaType != src.alphaType()) {
- return false;
- }
-
- if (dst.colorSpace() && !src.colorSpace()) {
- return false;
- }
-
- return true;
-}
-#endif // SkImageInfoPriv_DEFINED