Home | History | Annotate | Download | only in codec
      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 "SkCodec.h"
     12 #include "SkColorSpace.h"
     13 #include "SkImageInfo.h"
     14 #include "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