1 | /* |
2 | * Copyright 2016 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 SkRawCodec_DEFINED |
9 | #define SkRawCodec_DEFINED |
10 | |
11 | #include "include/codec/SkCodec.h" |
12 | #include "include/core/SkColorSpace.h" |
13 | #include "include/core/SkImageInfo.h" |
14 | #include "include/core/SkTypes.h" |
15 | |
16 | class SkDngImage; |
17 | class SkStream; |
18 | |
19 | /* |
20 | * |
21 | * This class implements the decoding for RAW images |
22 | * |
23 | */ |
24 | class SkRawCodec : public SkCodec { |
25 | public: |
26 | |
27 | /* |
28 | * Creates a RAW decoder |
29 | * Takes ownership of the stream |
30 | */ |
31 | static std::unique_ptr<SkCodec> MakeFromStream(std::unique_ptr<SkStream>, Result*); |
32 | |
33 | ~SkRawCodec() override; |
34 | |
35 | protected: |
36 | |
37 | Result onGetPixels(const SkImageInfo& dstInfo, void* dst, size_t dstRowBytes, const Options&, |
38 | int*) override; |
39 | |
40 | SkEncodedImageFormat onGetEncodedFormat() const override { |
41 | return SkEncodedImageFormat::kDNG; |
42 | } |
43 | |
44 | SkISize onGetScaledDimensions(float desiredScale) const override; |
45 | |
46 | bool onDimensionsSupported(const SkISize&) override; |
47 | |
48 | // SkCodec only applies the colorXform if it's necessary for color space |
49 | // conversion. SkRawCodec will always convert, so tell SkCodec not to. |
50 | bool usesColorXform() const override { return false; } |
51 | |
52 | private: |
53 | |
54 | /* |
55 | * Creates an instance of the decoder |
56 | * Called only by NewFromStream, takes ownership of dngImage. |
57 | */ |
58 | SkRawCodec(SkDngImage* dngImage); |
59 | |
60 | std::unique_ptr<SkDngImage> fDngImage; |
61 | |
62 | typedef SkCodec INHERITED; |
63 | }; |
64 | |
65 | #endif |
66 | |