• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
onGetEncodedFormat()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.
usesColorXform()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     using INHERITED = SkCodec;
63 };
64 
65 #endif
66