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#ifndef SkMasks_DEFINED
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkMasks_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypes.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Contains useful mask routines for SkMaskSwizzler
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkMasks {
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Input bit masks format
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct InputMasks {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t red;
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t green;
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t blue;
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t alpha;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Contains all of the information for a single mask
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     struct MaskInfo {
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t mask;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t shift;
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint32_t size;
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     };
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Create the masks object
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static SkMasks* CreateMasks(InputMasks masks, uint32_t bpp);
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Get a color component
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint8_t getRed(uint32_t pixel) const;
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint8_t getGreen(uint32_t pixel) const;
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint8_t getBlue(uint32_t pixel) const;
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint8_t getAlpha(uint32_t pixel) const;
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Getter for the alpha mask
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * The alpha mask may be used in other decoding modes
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     uint32_t getAlphaMask() const {
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fAlpha.mask;
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     }
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /*
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Constructor
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     *
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkMasks(const MaskInfo& red, const MaskInfo& green, const MaskInfo& blue,
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            const MaskInfo& alpha);
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const MaskInfo fRed;
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const MaskInfo fGreen;
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const MaskInfo fBlue;
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const MaskInfo fAlpha;
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
87