| 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,
|
| + 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
|
| 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
|
| + * @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);
|
| /**
|
| * 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,
|
| + const bool fixAlpha, bool* fSeenNonZeroAlphaPtr,
|
| + 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
|
|
|