diff options
Diffstat (limited to 'src/image/SkSurface_Raster.cpp')
-rw-r--r-- | src/image/SkSurface_Raster.cpp | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp index e55e5a751a..8cb3fd98a5 100644 --- a/src/image/SkSurface_Raster.cpp +++ b/src/image/SkSurface_Raster.cpp @@ -42,43 +42,30 @@ bool SkSurfaceValidateRasterInfo(const SkImageInfo& info, size_t rowBytes) { static const size_t kMaxTotalSize = SK_MaxS32; - int shift = 0; + // TODO(mtklein,brianosman): revisit all these color space decisions switch (info.colorType()) { case kAlpha_8_SkColorType: - if (info.colorSpace()) { - return false; - } - shift = 0; - break; case kGray_8_SkColorType: - if (info.colorSpace()) { - return false; - } - shift = 0; - break; case kRGB_565_SkColorType: - if (info.colorSpace()) { - return false; - } - shift = 1; - break; case kARGB_4444_SkColorType: + case kRGB_888x_SkColorType: + case kRGBA_1010102_SkColorType: + case kRGB_101010x_SkColorType: if (info.colorSpace()) { return false; } - shift = 1; break; - case kN32_SkColorType: + + case kRGBA_8888_SkColorType: + case kBGRA_8888_SkColorType: if (info.colorSpace() && !info.colorSpace()->gammaCloseToSRGB()) { return false; } - shift = 2; break; case kRGBA_F16_SkColorType: if (info.colorSpace() && (!info.colorSpace()->gammaIsLinear())) { return false; } - shift = 3; break; default: return false; @@ -88,6 +75,8 @@ bool SkSurfaceValidateRasterInfo(const SkImageInfo& info, size_t rowBytes) { return true; } + int shift = SkColorTypeShiftPerPixel(info.colorType()); + uint64_t minRB = (uint64_t)info.width() << shift; if (minRB > rowBytes) { return false; |