Index: src/codec/SkCodecPriv.h |
diff --git a/src/codec/SkCodecPriv.h b/src/codec/SkCodecPriv.h |
index 0c45fddff16d3159504e2eeabe7415e44a47ef5f..2596787b9b7aadcf44819e23849467b137c48cc7 100644 |
--- a/src/codec/SkCodecPriv.h |
+++ b/src/codec/SkCodecPriv.h |
@@ -30,6 +30,28 @@ |
#define COMPUTE_RESULT_ALPHA \ |
SkSwizzler::GetResult(zeroAlpha, maxAlpha); |
+static inline bool valid_alpha(SkAlphaType dstAlpha, SkAlphaType srcAlpha) { |
+ // Check for supported alpha types |
+ if (srcAlpha != dstAlpha) { |
+ if (kOpaque_SkAlphaType == srcAlpha) { |
+ // If the source is opaque, we must decode to opaque |
+ return false; |
+ } |
+ |
+ // The source is not opaque |
+ switch (dstAlpha) { |
+ case kPremul_SkAlphaType: |
+ case kUnpremul_SkAlphaType: |
+ // The source is not opaque, so either of these is okay |
+ break; |
+ default: |
+ // We cannot decode a non-opaque image to opaque (or unknown) |
+ return false; |
+ } |
+ } |
+ return true; |
+} |
+ |
/* |
* If there is a color table, get a pointer to the colors, otherwise return NULL |
*/ |
@@ -40,7 +62,6 @@ static const SkPMColor* get_color_ptr(SkColorTable* colorTable) { |
/* |
* |
* Copy the codec color table back to the client when kIndex8 color type is requested |
- * |
*/ |
static inline void copy_color_table(const SkImageInfo& dstInfo, SkColorTable* colorTable, |
SkPMColor* inputColorPtr, int* inputColorCount) { |
@@ -53,27 +74,21 @@ static inline void copy_color_table(const SkImageInfo& dstInfo, SkColorTable* co |
} |
/* |
- * |
* Compute row bytes for an image using pixels per byte |
- * |
*/ |
static inline size_t compute_row_bytes_ppb(int width, uint32_t pixelsPerByte) { |
return (width + pixelsPerByte - 1) / pixelsPerByte; |
} |
/* |
- * |
* Compute row bytes for an image using bytes per pixel |
- * |
*/ |
static inline size_t compute_row_bytes_bpp(int width, uint32_t bytesPerPixel) { |
return width * bytesPerPixel; |
} |
/* |
- * |
* Compute row bytes for an image |
- * |
*/ |
static inline size_t compute_row_bytes(int width, uint32_t bitsPerPixel) { |
if (bitsPerPixel < 16) { |
@@ -88,20 +103,16 @@ static inline size_t compute_row_bytes(int width, uint32_t bitsPerPixel) { |
} |
/* |
- * |
* Get a byte from a buffer |
* This method is unsafe, the caller is responsible for performing a check |
- * |
*/ |
static inline uint8_t get_byte(uint8_t* buffer, uint32_t i) { |
return buffer[i]; |
} |
/* |
- * |
* Get a short from a buffer |
* This method is unsafe, the caller is responsible for performing a check |
- * |
*/ |
static inline uint16_t get_short(uint8_t* buffer, uint32_t i) { |
uint16_t result; |
@@ -114,10 +125,8 @@ static inline uint16_t get_short(uint8_t* buffer, uint32_t i) { |
} |
/* |
- * |
* Get an int from a buffer |
* This method is unsafe, the caller is responsible for performing a check |
- * |
*/ |
static inline uint32_t get_int(uint8_t* buffer, uint32_t i) { |
uint32_t result; |