msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 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 | |
Hal Canary | 03a7f5f | 2017-02-10 09:06:38 -0500 | [diff] [blame] | 8 | #ifndef SkBitmapRegionCodec_DEFINED |
| 9 | #define SkBitmapRegionCodec_DEFINED |
| 10 | |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 11 | #include "SkBitmap.h" |
msarett | 5cb4885 | 2015-11-06 08:56:32 -0800 | [diff] [blame] | 12 | #include "SkBitmapRegionDecoder.h" |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 13 | #include "SkAndroidCodec.h" |
| 14 | |
| 15 | /* |
| 16 | * This class implements SkBitmapRegionDecoder using an SkAndroidCodec. |
| 17 | */ |
msarett | 5cb4885 | 2015-11-06 08:56:32 -0800 | [diff] [blame] | 18 | class SkBitmapRegionCodec : public SkBitmapRegionDecoder { |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 19 | public: |
| 20 | |
| 21 | /* |
| 22 | * Takes ownership of pointer to codec |
| 23 | */ |
| 24 | SkBitmapRegionCodec(SkAndroidCodec* codec); |
| 25 | |
msarett | cb8d719 | 2015-11-11 13:30:43 -0800 | [diff] [blame] | 26 | bool decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator, |
msarett | 35e5d1b | 2015-10-27 12:50:25 -0700 | [diff] [blame] | 27 | const SkIRect& desiredSubset, int sampleSize, |
Matt Sarett | 68feef4 | 2017-04-11 09:51:32 -0400 | [diff] [blame] | 28 | SkColorType colorType, bool requireUnpremul, |
| 29 | sk_sp<SkColorSpace> prefColorSpace) override; |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 30 | |
| 31 | bool conversionSupported(SkColorType colorType) override; |
| 32 | |
Hal Canary | 1fcc404 | 2016-11-30 17:07:59 -0500 | [diff] [blame] | 33 | SkEncodedImageFormat getEncodedFormat() override { return fCodec->getEncodedFormat(); } |
msarett | 3f65e93 | 2015-10-27 13:12:59 -0700 | [diff] [blame] | 34 | |
Matt Sarett | 479366c | 2017-04-14 09:23:45 -0400 | [diff] [blame] | 35 | SkColorType computeOutputColorType(SkColorType requestedColorType) override { |
| 36 | return fCodec->computeOutputColorType(requestedColorType); |
| 37 | } |
| 38 | |
| 39 | sk_sp<SkColorSpace> computeOutputColorSpace(SkColorType outputColorType, |
| 40 | sk_sp<SkColorSpace> prefColorSpace = nullptr) override { |
| 41 | return fCodec->computeOutputColorSpace(outputColorType, prefColorSpace); |
| 42 | } |
| 43 | |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 44 | private: |
| 45 | |
Ben Wagner | 145dbcd | 2016-11-03 14:40:50 -0400 | [diff] [blame] | 46 | std::unique_ptr<SkAndroidCodec> fCodec; |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 47 | |
msarett | 5cb4885 | 2015-11-06 08:56:32 -0800 | [diff] [blame] | 48 | typedef SkBitmapRegionDecoder INHERITED; |
msarett | 26ad17b | 2015-10-22 07:29:19 -0700 | [diff] [blame] | 49 | |
| 50 | }; |
Hal Canary | 03a7f5f | 2017-02-10 09:06:38 -0500 | [diff] [blame] | 51 | #endif // SkBitmapRegionCodec_DEFINED |