Chromium Code Reviews| Index: src/codec/SkSwizzler.h |
| diff --git a/src/codec/SkSwizzler.h b/src/codec/SkSwizzler.h |
| index 1adb14db0e6d409a295964257bc32a0049ad3e20..a793b45a886b46a0d05f7d90f4c0c9241af236fc 100644 |
| --- a/src/codec/SkSwizzler.h |
| +++ b/src/codec/SkSwizzler.h |
| @@ -18,28 +18,60 @@ public: |
| * Enum describing the config of the source data. |
| */ |
| enum SrcConfig { |
| - kGray, // 1 byte per pixel |
| - kIndex, // 1 byte per pixel |
| - kRGB, // 3 bytes per pixel |
| - kRGBX, // 4 byes per pixel (ignore 4th) |
| - kRGBA, // 4 bytes per pixel |
| - kRGB_565 // 2 bytes per pixel |
| + kGray, |
| + kIndex1, |
|
scroggo
2015/02/25 17:22:43
Alternatively, we could make the caller specify ho
|
| + kIndex2, |
| + kIndex4, |
| + kIndex8, |
| + kRGB, |
| + kBGR, |
| + kRGBX, |
| + kBGRX, |
| + kRGBA, |
| + kBGRA, |
| + kRGB_565, |
| + kMask16, |
| + kMask24, |
| + kMask32 |
| }; |
| static int BytesPerPixel(SrcConfig sc) { |
| switch (sc) { |
| + case kIndex1: |
| + case kIndex2: |
| + case kIndex4: |
| + return 0; // Flag used when pixels are less than a byte |
|
scroggo
2015/02/25 17:22:43
I don't like having both BitsPerPixel and BytesPer
|
| case kGray: |
| - case kIndex: |
| + case kIndex8: |
| return 1; |
| case kRGB: |
| + case kBGR: |
| + case kMask24: |
| return 3; |
| case kRGBX: |
| + case kBGRX: |
| case kRGBA: |
| + case kBGRA: |
| + case kMask32: |
| return 4; |
| case kRGB_565: |
| + case kMask16: |
| return 2; |
| } |
| } |
| + |
| + static int BitsPerPixel(SrcConfig sc) { |
| + switch (sc) { |
| + case kIndex1: |
| + return 1; |
| + case kIndex2: |
| + return 2; |
| + case kIndex4: |
| + return 4; |
| + default: |
| + return BytesPerPixel(sc) * 8; |
| + } |
| + } |
| /** |
| * Create a new SkSwizzler. |
| @@ -50,11 +82,17 @@ public: |
| * @param dstRowBytes rowBytes for dst. |
| * @param skipZeroes Whether to skip writing zeroes. Useful if dst is |
| * zero-initialized. The implementation may or may not respect this. |
| + * @param bitMasks Custom bit masks used to interpret pixels |
|
scroggo
2015/02/25 17:22:43
What does custom mean?
scroggo
2015/02/25 17:22:43
What does this mean? Does the swizzler always do t
|
| + * @param fixAlpha Whether to monitor for fully transparent images and set |
| + * them as opaque |
| * @return A new SkSwizzler or NULL on failure. |
| */ |
| static SkSwizzler* CreateSwizzler(SrcConfig sc, const SkPMColor* ctable, |
| const SkImageInfo& info, void* dst, |
| - size_t dstRowBytes, bool skipZeroes); |
| + size_t dstRowBytes, bool skipZeroes, |
| + const uint32_t* bitMasks = NULL, |
| + const bool fixAlpha = false, |
| + const bool inverted = false); |
|
scroggo
2015/02/25 17:22:43
Can you add a comment explaining "inverted"?
I sh
|
| /** |
| * Swizzle the next line. Call height times, once for each row of source. |
| * @param src The next row of the source data. |
| @@ -73,19 +111,29 @@ private: |
| */ |
| typedef bool (*RowProc)(void* SK_RESTRICT dstRow, |
| const uint8_t* SK_RESTRICT src, |
| - int width, int bpp, int y, |
| - const SkPMColor ctable[]); |
| + int width, int bpp, int bitsPerPixel, int y, |
| + const SkPMColor ctable[], const uint32_t* masks, |
|
scroggo
2015/02/25 17:22:43
please add comments for all of these.
|
| + const bool fixAlpha, bool* fSeenNonZeroAlphaPtr, |
|
scroggo
2015/02/25 17:22:43
fCamelCase is reserved for member fields. Paramete
msarett
2015/02/26 23:58:18
I was trying to draw attention to the fact that I
|
| + bool* fZeroPrevRowsPtr); |
| const RowProc fRowProc; |
| const SkPMColor* fColorTable; // Unowned pointer |
| + const uint32_t* fBitMasks; // Unowned pointer |
| const int fSrcPixelSize; |
| + const int fSrcBitsPerPixel; |
| const SkImageInfo fDstInfo; |
| void* fDstRow; |
| const size_t fDstRowBytes; |
| int fCurrY; |
| + const bool fFixAlpha; |
| + const bool fInverted; |
| + bool fSeenNonZeroAlpha; |
| + bool fZeroPrevRows; |
| - SkSwizzler(RowProc proc, const SkPMColor* ctable, int srcBpp, |
| - const SkImageInfo& info, void* dst, size_t rowBytes); |
| + SkSwizzler(RowProc proc, const SkPMColor* ctable, int srcBpp, int srcBitsPP, |
| + const SkImageInfo& info, void* dst, size_t rowBytes, |
| + const uint32_t* bitMasks, const bool fixAlpha, |
| + const bool inverted); |
| }; |
| #endif // SkSwizzler_DEFINED |