| 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[] = {
|
| + 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());
|
|
|