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