• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "SkData.h"
10 #include "SkImageGenerator.h"
11 
12 class SkCodecImageGenerator : public SkImageGenerator {
13 public:
14     /*
15      * If this data represents an encoded image that we know how to decode,
16      * return an SkCodecImageGenerator.  Otherwise return nullptr.
17      *
18      * Refs the data if an image generator can be returned.  Otherwise does
19      * not affect the data.
20      */
21     static SkImageGenerator* NewFromEncodedCodec(SkData* data);
22 
23 protected:
24     SkData* onRefEncodedData(SK_REFENCODEDDATA_CTXPARAM) override;
25 
26     bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[],
27             int* ctableCount) override;
28 
29     bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3],
30             SkYUVColorSpace* colorSpace) override;
31 
32 private:
33     /*
34      * Takes ownership of codec
35      * Refs the data
36      */
37     SkCodecImageGenerator(SkCodec* codec, SkData* data);
38 
39     SkAutoTDelete<SkCodec> fCodec;
40     SkAutoTUnref<SkData> fData;
41 
42     // FIXME: These fields are necessary only until we change the API of SkImageGenerator
43     //        to match SkCodec.  Once the API is changed, they should be removed.
44     int fYWidth;
45     int fUWidth;
46     int fVWidth;
47 
48     typedef SkImageGenerator INHERITED;
49 };
50