Chromium Code Reviews| Index: include/core/SkImageInfo.h |
| diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h |
| index c55edd36c2252bc38fa2ad581875e839aa8a0ef5..4b308c05d88ca736d69451f3b970c1bd71b30b12 100644 |
| --- a/include/core/SkImageInfo.h |
| +++ b/include/core/SkImageInfo.h |
| @@ -105,6 +105,25 @@ static int SkColorTypeBytesPerPixel(SkColorType ct) { |
| return gSize[ct]; |
| } |
| +static int SkColorTypeShiftPerPixel(SkColorType ct) { |
| + static const uint8_t gShift[] = { |
|
f(malita)
2016/04/15 13:52:16
Isn't this going to add the static array to every
|
| + 0, // Unknown |
| + 0, // Alpha_8 |
| + 1, // RGB_565 |
| + 1, // ARGB_4444 |
| + 2, // RGBA_8888 |
| + 2, // BGRA_8888 |
| + 0, // kIndex_8 |
| + 0, // kGray_8 |
| + 3, // kRGBA_F16 |
| + }; |
| + static_assert(SK_ARRAY_COUNT(gShift) == (size_t)(kLastEnum_SkColorType + 1), |
| + "size_mismatch_with_SkColorType_enum"); |
| + |
| + SkASSERT((size_t)ct < SK_ARRAY_COUNT(gShift)); |
| + return gShift[ct]; |
| +} |
| + |
| static inline size_t SkColorTypeMinRowBytes(SkColorType ct, int width) { |
| return width * SkColorTypeBytesPerPixel(ct); |
| } |
| @@ -114,15 +133,10 @@ static inline bool SkColorTypeIsValid(unsigned value) { |
| } |
| static inline size_t SkColorTypeComputeOffset(SkColorType ct, int x, int y, size_t rowBytes) { |
| - int shift = 0; |
| - switch (SkColorTypeBytesPerPixel(ct)) { |
| - case 8: shift = 3; break; |
| - case 4: shift = 2; break; |
| - case 2: shift = 1; break; |
| - case 1: shift = 0; break; |
| - default: return 0; |
| + if (kUnknown_SkColorType == ct) { |
| + return 0; |
| } |
| - return y * rowBytes + (x << shift); |
| + return y * rowBytes + (x << SkColorTypeShiftPerPixel(ct)); |
| } |
| /////////////////////////////////////////////////////////////////////////////// |
| @@ -252,9 +266,9 @@ public: |
| return SkImageInfo::Make(fWidth, fHeight, newColorType, fAlphaType, fProfileType); |
| } |
| - int bytesPerPixel() const { |
| - return SkColorTypeBytesPerPixel(fColorType); |
| - } |
| + int bytesPerPixel() const { return SkColorTypeBytesPerPixel(fColorType); } |
| + |
| + int shiftPerPixel() const { return SkColorTypeShiftPerPixel(fColorType); } |
| uint64_t minRowBytes64() const { |
| return sk_64_mul(fWidth, this->bytesPerPixel()); |