1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkBitmapRegionCodec_DEFINED
9#define SkBitmapRegionCodec_DEFINED
10
11#include "SkBitmap.h"
12#include "SkBitmapRegionDecoder.h"
13#include "SkAndroidCodec.h"
14
15/*
16 * This class implements SkBitmapRegionDecoder using an SkAndroidCodec.
17 */
18class SkBitmapRegionCodec : public SkBitmapRegionDecoder {
19public:
20
21    /*
22     * Takes ownership of pointer to codec
23     */
24    SkBitmapRegionCodec(SkAndroidCodec* codec);
25
26    bool decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator,
27                      const SkIRect& desiredSubset, int sampleSize,
28                      SkColorType colorType, bool requireUnpremul,
29                      sk_sp<SkColorSpace> prefColorSpace) override;
30
31    SkEncodedImageFormat getEncodedFormat() override { return fCodec->getEncodedFormat(); }
32
33    SkColorType computeOutputColorType(SkColorType requestedColorType) override {
34        return fCodec->computeOutputColorType(requestedColorType);
35    }
36
37    sk_sp<SkColorSpace> computeOutputColorSpace(SkColorType outputColorType,
38            sk_sp<SkColorSpace> prefColorSpace = nullptr) override {
39        return fCodec->computeOutputColorSpace(outputColorType, prefColorSpace);
40    }
41
42private:
43
44    std::unique_ptr<SkAndroidCodec> fCodec;
45
46    typedef SkBitmapRegionDecoder INHERITED;
47
48};
49#endif  // SkBitmapRegionCodec_DEFINED
50