| Index: tools/SkBitmapRegionDecoderInterface.h | 
| diff --git a/tools/SkBitmapRegionDecoderInterface.h b/tools/SkBitmapRegionDecoderInterface.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..bc28c2b2af6f2710c8c2d94ef3a64abb45cbe2c2 | 
| --- /dev/null | 
| +++ b/tools/SkBitmapRegionDecoderInterface.h | 
| @@ -0,0 +1,77 @@ | 
| +/* | 
| + * 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 SkBitmapRegionDecoder_DEFINED | 
| +#define SkBitmapRegionDecoder_DEFINED | 
| + | 
| +#include "SkBitmap.h" | 
| +#include "SkStream.h" | 
| + | 
| +/* | 
| + * This class aims to provide an interface to test multiple implementations of | 
| + * SkBitmapRegionDecoder. | 
| + */ | 
| +class SkBitmapRegionDecoderInterface { | 
| +public: | 
| + | 
| +    enum Strategy { | 
| +        kCanvas_Strategy,   // Draw to the canvas, uses SkCodec | 
| +        kOriginal_Strategy, // Sampling, uses SkImageDecoder | 
| +        // TODO (msarett): Add strategy for SkScaledCodec | 
| +    }; | 
| + | 
| +    /* | 
| +     * @param stream   Encoded image stream, takes ownership | 
| +     * @param strategy Strategy used for scaling and subsetting | 
| +     * @return         Tries to create an SkBitmapRegionDecoder, returns NULL | 
| +     *                 on failure | 
| +     */ | 
| +    static SkBitmapRegionDecoderInterface* CreateBitmapRegionDecoder( | 
| +            SkStreamRewindable* stream, Strategy strategy); | 
| + | 
| +    /* | 
| +     * Decode a scaled region of the encoded image stream | 
| +     * | 
| +     * @param start_x    X-coordinate of upper-left corner of region. | 
| +     *                   This coordinate is unscaled, relative to the original dimensions. | 
| +     * @param start_y    Y-coordinate of upper-left corner of region. | 
| +     *                   This coordinate is unscaled, relative to the original dimensions. | 
| +     * @param width      Width of the region to decode. | 
| +     *                   This distance is unscaled, relative to the original dimensions. | 
| +     * @param height     Height of the region to decode. | 
| +     *                   This distance is unscaled, relative to the original dimensions. | 
| +     * @param sampleSize An integer downscaling factor for the decode. | 
| +     * @param colorType  Preferred output colorType. | 
| +     *                   New implementations should return NULL if they do not support | 
| +     *                   decoding to this color type. | 
| +     *                   The old kOriginal_Strategy will decode to a default color type | 
| +     *                   if this color type is unsupported. | 
| +     * @return           Pointer to a bitmap of the decoded region on success, NULL on | 
| +     *                   failure. | 
| +     */ | 
| +    virtual SkBitmap* decodeRegion(int start_x, int start_y, int width, | 
| +                                   int height, int sampleSize, | 
| +                                   SkColorType colorType) = 0; | 
| + | 
| +    int width() const { return fWidth; } | 
| +    int height() const { return fHeight; } | 
| + | 
| +    virtual ~SkBitmapRegionDecoderInterface() {} | 
| + | 
| +protected: | 
| + | 
| +    SkBitmapRegionDecoderInterface(int width, int height) | 
| +        : fWidth(width) | 
| +        , fHeight(height) | 
| +    {} | 
| + | 
| +private: | 
| +    const int fWidth; | 
| +    const int fHeight; | 
| +}; | 
| + | 
| +#endif | 
|  |