1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2015 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkCodec_wbmp_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkCodec_wbmp_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCodec.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorSpace.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSwizzler.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkWbmpCodec final : public SkCodec { 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static bool IsWbmp(const void*, size_t); 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /* 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Assumes IsWbmp was called and returned true 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Creates a wbmp codec 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Takes ownership of the stream 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static std::unique_ptr<SkCodec> MakeFromStream(std::unique_ptr<SkStream>, Result*); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkEncodedImageFormat onGetEncodedFormat() const override; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Result onGetPixels(const SkImageInfo&, void*, size_t, 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const Options&, int*) override; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onRewind() override; 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool conversionSupported(const SkImageInfo& dst, SkColorType srcColor, 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool srcIsOpaque, const SkColorSpace* srcCS) const override; 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // No need to Xform; all pixels are either black or white. 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool usesColorXform() const override { return false; } 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /* 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Returns a swizzler on success, nullptr on failure 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkSwizzler* initializeSwizzler(const SkImageInfo& info, 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const Options& opts); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkSampler* getSampler(bool createIfNecessary) override { 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkASSERT(fSwizzler || !createIfNecessary); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fSwizzler.get(); 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /* 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Read a src row from the encoded stream 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool readRow(uint8_t* row); 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkWbmpCodec(int width, int height, const SkEncodedInfo&, std::unique_ptr<SkStream>); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const size_t fSrcRowBytes; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Used for scanline decodes: 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<SkSwizzler> fSwizzler; 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoTMalloc<uint8_t> fSrcBuffer; 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int onGetScanlines(void* dst, int count, size_t dstRowBytes) override; 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onSkipScanlines(int count) override; 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Result onStartScanlineDecode(const SkImageInfo& dstInfo, 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const Options& options) override; 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef SkCodec INHERITED; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // SkCodec_wbmp_DEFINED 68