diff options
author | Brian Osman <brianosman@google.com> | 2018-06-04 09:21:17 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-04 14:07:48 +0000 |
commit | e1adc3a9552c21e7b45b7a910f2a0854e00a92b9 (patch) | |
tree | 5744750ccf142f18b84a16b9d28f1ba382d76155 | |
parent | 7258e97e8e3af173cc5131f309ae487f663bfd39 (diff) |
Remove color space restrictions from image infos
What makes an info valid (or invalid)? Nothing to do with
color space.
Bug: skia:
Change-Id: I6795efa9aa74ab0d65935c5ddccc1058f8e0b112
Reviewed-on: https://skia-review.googlesource.com/131780
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
-rw-r--r-- | include/private/SkImageInfoPriv.h | 51 | ||||
-rw-r--r-- | src/image/SkImage_Gpu.cpp | 4 | ||||
-rw-r--r-- | src/image/SkImage_Raster.cpp | 2 | ||||
-rw-r--r-- | src/image/SkSurface_Raster.cpp | 5 | ||||
-rw-r--r-- | src/images/SkImageEncoderPriv.h | 14 | ||||
-rw-r--r-- | src/images/SkJpegEncoder.cpp | 2 | ||||
-rw-r--r-- | src/images/SkPngEncoder.cpp | 2 | ||||
-rw-r--r-- | src/images/SkWebpEncoder.cpp | 2 | ||||
-rw-r--r-- | tests/ReadPixelsTest.cpp | 2 |
9 files changed, 14 insertions, 70 deletions
diff --git a/include/private/SkImageInfoPriv.h b/include/private/SkImageInfoPriv.h index 56ed16fb9d..144ad0a062 100644 --- a/include/private/SkImageInfoPriv.h +++ b/include/private/SkImageInfoPriv.h @@ -88,10 +88,9 @@ static inline size_t SkColorTypeComputeOffset(SkColorType ct, int x, int y, size } /** - * This contains shared checks on SkImageInfo. Depending on the desired color space behavior, - * the caller should choose one of the two versions below. + * Returns true if |info| contains a valid combination of width, height, colorType, and alphaType. */ -static inline bool SkImageInfoIsValidCommon(const SkImageInfo& info) { +static inline bool SkImageInfoIsValid(const SkImageInfo& info) { if (info.width() <= 0 || info.height() <= 0) { return false; } @@ -114,52 +113,8 @@ static inline bool SkImageInfoIsValidCommon(const SkImageInfo& info) { } /** - * 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. - */ -static inline bool SkImageInfoIsValid(const SkImageInfo& 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. @@ -174,7 +129,7 @@ static inline bool SkImageInfoIsValid(const SkImageInfo& info) { * conversion is not well-defined. */ static inline bool SkImageInfoValidConversion(const SkImageInfo& dst, const SkImageInfo& src) { - if (!SkImageInfoIsValidAllowNumericalCS(dst) || !SkImageInfoIsValidAllowNumericalCS(src)) { + if (!SkImageInfoIsValid(dst) || !SkImageInfoIsValid(src)) { return false; } diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index ed9021c301..4759f4efeb 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -329,7 +329,7 @@ bool validate_backend_texture(GrContext* ctx, const GrBackendTexture& tex, GrPix // TODO: Create a SkImageColorInfo struct for color, alpha, and color space so we don't need to // create a fake image info here. SkImageInfo info = SkImageInfo::Make(1, 1, ct, at, cs); - if (!SkImageInfoIsValidAllowNumericalCS(info)) { + if (!SkImageInfoIsValid(info)) { return false; } @@ -697,7 +697,7 @@ sk_sp<SkImage> SkImage_Gpu::MakePromiseTexture(GrContext* context, } SkImageInfo info = SkImageInfo::Make(width, height, colorType, alphaType, colorSpace); - if (!SkImageInfoIsValidAllowNumericalCS(info)) { + if (!SkImageInfoIsValid(info)) { return nullptr; } GrPixelConfig config = kUnknown_GrPixelConfig; diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index f392a83b35..ca01780d36 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -315,7 +315,7 @@ sk_sp<SkImage> SkMakeImageFromRasterBitmapPriv(const SkBitmap& bm, SkCopyPixelsM } sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, SkCopyPixelsMode cpm) { - if (!SkImageInfoIsValidAllowNumericalCS(bm.info()) || bm.rowBytes() < bm.info().minRowBytes()) { + if (!SkImageInfoIsValid(bm.info()) || bm.rowBytes() < bm.info().minRowBytes()) { return nullptr; } diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp index a3f69c244f..73ff4bab22 100644 --- a/src/image/SkSurface_Raster.cpp +++ b/src/image/SkSurface_Raster.cpp @@ -38,10 +38,7 @@ private: /////////////////////////////////////////////////////////////////////////////// bool SkSurfaceValidateRasterInfo(const SkImageInfo& info, size_t rowBytes) { - if (!SkImageInfoIsValidCommon(info)) { - return false; - } - if (info.isEmpty()) { + if (!SkImageInfoIsValid(info)) { return false; } diff --git a/src/images/SkImageEncoderPriv.h b/src/images/SkImageEncoderPriv.h index e6903bc5e8..a7707fec52 100644 --- a/src/images/SkImageEncoderPriv.h +++ b/src/images/SkImageEncoderPriv.h @@ -11,17 +11,9 @@ #include "SkImageEncoder.h" #include "SkImageInfoPriv.h" -static inline bool SkPixmapIsValid(const SkPixmap& src, - SkTransferFunctionBehavior unpremulBehavior) -{ - if (SkTransferFunctionBehavior::kRespect == unpremulBehavior) { - if (!SkImageInfoIsValidRenderingCS(src.info())) { - return false; - } - } else { - if (!SkImageInfoIsValidAllowNumericalCS(src.info())) { - return false; - } +static inline bool SkPixmapIsValid(const SkPixmap& src) { + if (!SkImageInfoIsValid(src.info())) { + return false; } if (!src.addr() || src.rowBytes() < src.info().minRowBytes()) { diff --git a/src/images/SkJpegEncoder.cpp b/src/images/SkJpegEncoder.cpp index 606b553537..9c139f707b 100644 --- a/src/images/SkJpegEncoder.cpp +++ b/src/images/SkJpegEncoder.cpp @@ -181,7 +181,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& srcInfo, const SkJpegEncoder std::unique_ptr<SkEncoder> SkJpegEncoder::Make(SkWStream* dst, const SkPixmap& src, const Options& options) { - if (!SkPixmapIsValid(src, options.fBlendBehavior)) { + if (!SkPixmapIsValid(src)) { return nullptr; } diff --git a/src/images/SkPngEncoder.cpp b/src/images/SkPngEncoder.cpp index 19fc27e4a6..fffda73fd0 100644 --- a/src/images/SkPngEncoder.cpp +++ b/src/images/SkPngEncoder.cpp @@ -364,7 +364,7 @@ void SkPngEncoderMgr::chooseProc(const SkImageInfo& srcInfo, std::unique_ptr<SkEncoder> SkPngEncoder::Make(SkWStream* dst, const SkPixmap& src, const Options& options) { - if (!SkPixmapIsValid(src, options.fUnpremulBehavior)) { + if (!SkPixmapIsValid(src)) { return nullptr; } diff --git a/src/images/SkWebpEncoder.cpp b/src/images/SkWebpEncoder.cpp index ee13563ea7..2cb55d2f04 100644 --- a/src/images/SkWebpEncoder.cpp +++ b/src/images/SkWebpEncoder.cpp @@ -109,7 +109,7 @@ static int stream_writer(const uint8_t* data, size_t data_size, } bool SkWebpEncoder::Encode(SkWStream* stream, const SkPixmap& pixmap, const Options& opts) { - if (!SkPixmapIsValid(pixmap, opts.fUnpremulBehavior)) { + if (!SkPixmapIsValid(pixmap)) { return false; } diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp index 12a567fd8a..7bd1fe5914 100644 --- a/tests/ReadPixelsTest.cpp +++ b/tests/ReadPixelsTest.cpp @@ -610,7 +610,7 @@ static const void* five_reference_pixels(SkColorType colorType) { static void test_conversion(skiatest::Reporter* r, const SkImageInfo& dstInfo, const SkImageInfo& srcInfo) { - if (!SkImageInfoIsValidRenderingCS(srcInfo)) { + if (!SkImageInfoIsValid(srcInfo)) { return; } |