Home | History | Annotate | Download | only in codec
      1 /*
      2  * Copyright 2015 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 #include "SkCodec.h"
      9 #include "SkImageInfo.h"
     10 #include "SkStream.h"
     11 #include "SkTypes.h"
     12 
     13 /*
     14  * This class implements the decoding for bmp images
     15  */
     16 class SkIcoCodec : public SkCodec {
     17 public:
     18 
     19     /*
     20      * Checks the start of the stream to see if the image is a Ico or Cur
     21      */
     22     static bool IsIco(SkStream*);
     23 
     24     /*
     25      * Assumes IsIco was called and returned true
     26      * Creates an Ico decoder
     27      * Reads enough of the stream to determine the image format
     28      */
     29     static SkCodec* NewFromStream(SkStream*);
     30 
     31 protected:
     32 
     33     /*
     34      * Chooses the best dimensions given the desired scale
     35      */
     36     SkISize onGetScaledDimensions(float desiredScale) const override;
     37 
     38     /*
     39      * Initiates the Ico decode
     40      */
     41     Result onGetPixels(const SkImageInfo& dstInfo, void* dst,
     42                        size_t dstRowBytes, const Options&, SkPMColor*, int*)
     43                        override;
     44 
     45     SkEncodedFormat onGetEncodedFormat() const override {
     46         return kICO_SkEncodedFormat;
     47     }
     48 
     49 private:
     50 
     51     /*
     52      * Constructor called by NewFromStream
     53      * @param embeddedCodecs codecs for the embedded images, takes ownership
     54      */
     55     SkIcoCodec(const SkImageInfo& srcInfo,
     56                SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs);
     57 
     58     SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>>
     59             fEmbeddedCodecs; // owned
     60 
     61     typedef SkCodec INHERITED;
     62 };
     63