Index: src/codec/SkMasks.cpp |
diff --git a/src/codec/SkMasks.cpp b/src/codec/SkMasks.cpp |
index 3126672f22c8c1e958ca1882be45421ccdfbd9e3..ac97a39d783d67b09494e1afe81ad48160f40161 100644 |
--- a/src/codec/SkMasks.cpp |
+++ b/src/codec/SkMasks.cpp |
@@ -47,7 +47,7 @@ const static uint8_t n_bit_to_8_bit_lookup_table[] = { |
* Convert an n bit component to an 8-bit component |
* |
*/ |
-static uint8_t convert_to_8(uint32_t component, uint32_t n) { |
+static uint8_t convert_to_8(uint8_t component, uint32_t n) { |
msarett
2016/02/10 20:59:28
No reason for "component" to ever be larger than 8
|
if (0 == n) { |
return 0; |
} else if (8 > n) { |
@@ -87,11 +87,6 @@ uint8_t SkMasks::getAlpha(uint32_t pixel) const { |
* |
*/ |
const SkMasks::MaskInfo process_mask(uint32_t mask, uint32_t bpp) { |
- // Trim the masks to the allowed number of bits |
msarett
2016/02/10 20:59:28
Unrelated to the bug fix. We do this is CreateMas
|
- if (bpp < 32) { |
- mask &= (1 << bpp) - 1; |
- } |
- |
// Determine properties of the mask |
uint32_t tempMask = mask; |
uint32_t shift = 0; |
@@ -105,14 +100,19 @@ const SkMasks::MaskInfo process_mask(uint32_t mask, uint32_t bpp) { |
for (; tempMask & 1; tempMask >>= 1) { |
size++; |
} |
- // Check that the mask is continuous |
- if (tempMask != 0) { |
- SkCodecPrintf("Warning: Bit masks is not continuous.\n"); |
+ // Verify that the mask is continuous |
+ if (tempMask) { |
+ SkCodecPrintf("Warning: Bit mask is not continuous.\n"); |
+ // Finish processing the mask |
msarett
2016/02/10 20:59:28
Even if the mask is not continuous, let's count al
|
+ for (; tempMask; tempMask >>= 1) { |
+ size++; |
+ } |
} |
// Truncate masks greater than 8 bits |
if (size > 8) { |
shift += size - 8; |
size = 8; |
+ mask &= 0xFF << shift; |
msarett
2016/02/10 20:59:28
Make sure that the final mask is no larger than 8-
|
} |
} |