diff options
Diffstat (limited to 'gfx/skia/skia/src/codec/SkMaskSwizzler.h')
-rw-r--r-- | gfx/skia/skia/src/codec/SkMaskSwizzler.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/codec/SkMaskSwizzler.h b/gfx/skia/skia/src/codec/SkMaskSwizzler.h new file mode 100644 index 0000000000..4cac41905c --- /dev/null +++ b/gfx/skia/skia/src/codec/SkMaskSwizzler.h @@ -0,0 +1,76 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef SkMaskSwizzler_DEFINED +#define SkMaskSwizzler_DEFINED + +#include "include/codec/SkCodec.h" +#include "include/core/SkTypes.h" +#include "src/codec/SkSampler.h" + +#include <cstdint> + +class SkMasks; +struct SkImageInfo; + +/* + * + * Used to swizzle images whose pixel components are extracted by bit masks + * Currently only used by bmp + * + */ +class SkMaskSwizzler : public SkSampler { +public: + + /* + * @param masks Unowned pointer to helper class + */ + static SkMaskSwizzler* CreateMaskSwizzler(const SkImageInfo& dstInfo, + bool srcIsOpaque, + SkMasks* masks, + uint32_t bitsPerPixel, + const SkCodec::Options& options); + + /* + * Swizzle a row + */ + void swizzle(void* dst, const uint8_t* SK_RESTRICT src); + + int fillWidth() const override { + return fDstWidth; + } + + /** + * Returns the byte offset at which we write to destination memory, taking + * scaling, subsetting, and partial frames into account. + * A similar function exists on SkSwizzler. + */ + int swizzleWidth() const { return fDstWidth; } + +private: + + /* + * Row procedure used for swizzle + */ + typedef void (*RowProc)(void* dstRow, const uint8_t* srcRow, int width, + SkMasks* masks, uint32_t startX, uint32_t sampleX); + + SkMaskSwizzler(SkMasks* masks, RowProc proc, int subsetWidth, int srcOffset); + + int onSetSampleX(int) override; + + SkMasks* fMasks; // unowned + const RowProc fRowProc; + + // FIXME: Can this class share more with SkSwizzler? These variables are all the same. + const int fSubsetWidth; // Width of the subset of source before any sampling. + int fDstWidth; // Width of dst, which may differ with sampling. + int fSampleX; + int fSrcOffset; + int fX0; +}; + +#endif |