text: /*
   * Copyright 2016 Google Inc.
   *
   * Use of this source code is governed by a BSD-style license that can be
   * found in the LICENSE file.
   */
  
  #ifndef SkRawCodec_DEFINED
  #define SkRawCodec_DEFINED
  
  #include "include/codec/SkCodec.h"
  #include "include/core/SkColorSpace.h"
  #include "include/core/SkImageInfo.h"
  #include "include/core/SkTypes.h"
  
  class SkDngImage;
  class SkStream;
  
  /*
   *
   * This class implements the decoding for RAW images
   *
   */
  class SkRawCodec : public SkCodec {
  public:
  
      /*
       * Creates a RAW decoder
       * Takes ownership of the stream
       */
      static std::unique_ptr<SkCodec> MakeFromStream(std::unique_ptr<SkStream>, Result*);
  
      ~SkRawCodec() override;
  
  protected:
  
      Result onGetPixels(const SkImageInfo& dstInfo, void* dst, size_t dstRowBytes, const Options&,
              int*) override;
  
      SkEncodedImageFormat onGetEncodedFormat() const override {
          return SkEncodedImageFormat::kDNG;
      }
  
      SkISize onGetScaledDimensions(float desiredScale) const override;
  
      bool onDimensionsSupported(const SkISize&) override;
  
      // SkCodec only applies the colorXform if it's necessary for color space
      // conversion. SkRawCodec will always convert, so tell SkCodec not to.
      bool usesColorXform() const override { return false; }
  
  private:
  
      /*
       * Creates an instance of the decoder
       * Called only by NewFromStream, takes ownership of dngImage.
       */
      SkRawCodec(SkDngImage* dngImage);
  
      std::unique_ptr<SkDngImage> fDngImage;
  
      typedef SkCodec INHERITED;
  };
  
  #endif
  