Index: src/codec/SkBmpCodec.h |
diff --git a/src/codec/SkBmpCodec.h b/src/codec/SkBmpCodec.h |
index 9909945c51047865cdb72c45a77cfea9125bc395..51d03000919977549919543605daeba40d713e5e 100644 |
--- a/src/codec/SkBmpCodec.h |
+++ b/src/codec/SkBmpCodec.h |
@@ -4,6 +4,8 @@ |
* Use of this source code is governed by a BSD-style license that can be |
* found in the LICENSE file. |
*/ |
+#ifndef SkBmpCodec_DEFINED |
+#define SkBmpCodec_DEFINED |
#include "SkCodec.h" |
#include "SkColorTable.h" |
@@ -13,19 +15,15 @@ |
#include "SkSwizzler.h" |
#include "SkTypes.h" |
-// TODO: rename SkCodec_libbmp files to SkBmpCodec |
/* |
- * |
- * This class implements the decoding for bmp images |
- * |
+ * This class enables code sharing between its bmp codec subclasses. The |
+ * subclasses actually do the work. |
*/ |
class SkBmpCodec : public SkCodec { |
public: |
/* |
- * |
* Describes if rows of the input start at the top or bottom of the image |
- * |
*/ |
enum RowOrder { |
kTopDown_RowOrder, |
@@ -33,161 +31,75 @@ public: |
}; |
/* |
- * |
* Checks the start of the stream to see if the image is a bmp |
- * |
*/ |
static bool IsBmp(SkStream*); |
/* |
- * |
* Assumes IsBmp was called and returned true |
* Creates a bmp decoder |
* Reads enough of the stream to determine the image format |
- * |
*/ |
static SkCodec* NewFromStream(SkStream*); |
/* |
- * |
* Creates a bmp decoder for a bmp embedded in ico |
* Reads enough of the stream to determine the image format |
- * |
*/ |
static SkCodec* NewFromIco(SkStream*); |
protected: |
- /* |
- * |
- * Initiates the bmp decode |
- * |
- */ |
- Result onGetPixels(const SkImageInfo& dstInfo, void* dst, |
- size_t dstRowBytes, const Options&, SkPMColor*, |
- int*) override; |
+ SkBmpCodec(const SkImageInfo& info, SkStream* stream, uint16_t bitsPerPixel, |
+ RowOrder rowOrder); |
SkEncodedFormat onGetEncodedFormat() const override { return kBMP_SkEncodedFormat; } |
-private: |
- |
- /* |
- * |
- * Used to define the input format of the bmp |
- * |
- */ |
- enum BitmapInputFormat { |
- kStandard_BitmapInputFormat, |
- kRLE_BitmapInputFormat, |
- kBitMask_BitmapInputFormat, |
- kUnknown_BitmapInputFormat |
- }; |
- |
- /* |
- * |
- * Creates the color table |
- * Sets colorCount to the new color count if it is non-NULL |
- */ |
- bool createColorTable(SkAlphaType alphaType, int* colorCount); |
- |
/* |
- * |
- * Creates a bmp decoder |
- * Reads enough of the stream to determine the image format |
- * |
- */ |
- static SkCodec* NewFromStream(SkStream*, bool isIco); |
- |
- /* |
- * |
* Read enough of the stream to initialize the SkBmpCodec. Returns a bool |
* representing success or failure. If it returned true, and codecOut was |
* not NULL, it will be set to a new SkBmpCodec. |
* Does *not* take ownership of the passed in SkStream. |
- * |
*/ |
- static bool ReadHeader(SkStream*, bool isIco, SkCodec** codecOut); |
+ static bool ReadHeader(SkStream*, bool inIco, SkCodec** codecOut); |
/* |
- * |
- * Performs the bitmap decoding for bit masks input format |
- * |
+ * Rewinds the image stream if necessary |
*/ |
- Result decodeMask(const SkImageInfo& dstInfo, void* dst, |
- size_t dstRowBytes, const Options& opts); |
+ bool handleRewind(bool inIco); |
/* |
- * |
- * Set an RLE pixel using the color table |
- * |
- */ |
- void setRLEPixel(void* dst, size_t dstRowBytes, |
- const SkImageInfo& dstInfo, uint32_t x, uint32_t y, |
- uint8_t index); |
- /* |
- * |
- * Set an RLE24 pixel from R, G, B values |
- * |
+ * Get the destination row to start filling from |
+ * Used to fill the remainder of the image on incomplete input for bmps |
+ * This is tricky since bmps may be kTopDown or kBottomUp. For kTopDown, |
+ * we start filling from where we left off, but for kBottomUp we start |
+ * filling at the top of the image. |
*/ |
- void setRLE24Pixel(void* dst, size_t dstRowBytes, |
- const SkImageInfo& dstInfo, uint32_t x, uint32_t y, |
- uint8_t red, uint8_t green, uint8_t blue); |
+ void* getDstStartRow(void* dst, size_t dstRowBytes, int32_t y) const; |
/* |
- * |
- * Performs the bitmap decoding for RLE input format |
- * |
+ * Compute the number of colors in the color table |
*/ |
- Result decodeRLE(const SkImageInfo& dstInfo, void* dst, |
- size_t dstRowBytes, const Options& opts); |
+ uint32_t computeNumColors(uint32_t numColors); |
/* |
- * |
- * Performs the bitmap decoding for standard input format |
- * |
+ * Accessors used by subclasses |
*/ |
- Result decode(const SkImageInfo& dstInfo, void* dst, size_t dstRowBytes, const Options& opts); |
+ uint16_t bitsPerPixel() const { return fBitsPerPixel; } |
+ RowOrder rowOrder() const { return fRowOrder; } |
+ |
+private: |
/* |
- * |
- * Creates an instance of the decoder |
- * Called only by NewFromStream |
- * |
- * @param srcInfo contains the source width and height |
- * @param stream the stream of image data |
- * @param bitsPerPixel the number of bits used to store each pixel |
- * @param format the format of the bmp file |
- * @param masks optional color masks for certain bmp formats, passes |
- ownership to SkBmpCodec |
- * @param numColors the number of colors in the color table |
- * @param bytesPerColor the number of bytes in the stream used to represent |
- each color in the color table |
- * @param offset the offset of the image pixel data from the end of the |
- * headers |
- * @param rowOrder indicates whether rows are ordered top-down or bottom-up |
- * @param RLEBytes used only for RLE decodes, as we must decode all |
- * of the data at once rather than row by row |
- * it indicates the amount of data left in the stream |
- * after decoding the headers |
- * |
+ * Creates a bmp decoder |
+ * Reads enough of the stream to determine the image format |
*/ |
- SkBmpCodec(const SkImageInfo& srcInfo, SkStream* stream, |
- uint16_t bitsPerPixel, BitmapInputFormat format, |
- SkMasks* masks, uint32_t numColors, uint32_t bytesPerColor, |
- uint32_t offset, RowOrder rowOrder, size_t RLEBytes, |
- bool isIco); |
- |
- // Fields |
- const uint16_t fBitsPerPixel; |
- const BitmapInputFormat fInputFormat; |
- SkAutoTDelete<SkMasks> fMasks; // owned |
- SkAutoTUnref<SkColorTable> fColorTable; // owned |
- uint32_t fNumColors; |
- const uint32_t fBytesPerColor; |
- const uint32_t fOffset; |
- const RowOrder fRowOrder; |
- const size_t fRLEBytes; |
- const bool fIsIco; |
+ static SkCodec* NewFromStream(SkStream*, bool inIco); |
+ |
+ const uint16_t fBitsPerPixel; |
+ const RowOrder fRowOrder; |
typedef SkCodec INHERITED; |
}; |
+ |
+#endif |