1 /*
2  * Copyright 2014 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 SkPixelSerializer_DEFINED
9 #define SkPixelSerializer_DEFINED
10 
11 #include "SkRefCnt.h"
12 #include "SkPixmap.h"
13 
14 class SkData;
15 
16 /**
17  *  Interface for serializing pixels, e.g. SkBitmaps in an SkPicture.
18  */
19 class SkPixelSerializer : public SkRefCnt {
20 public:
~SkPixelSerializer()21     virtual ~SkPixelSerializer() {}
22 
23     /**
24      *  Call to determine if the client wants to serialize the encoded data. If
25      *  false, serialize another version (e.g. the result of encodePixels).
26      */
useEncodedData(const void * data,size_t len)27     bool useEncodedData(const void* data, size_t len) {
28         return this->onUseEncodedData(data, len);
29     }
30 
31     /**
32      *  Call to get the client's version of encoding these pixels. If it
33      *  returns NULL, serialize the raw pixels.
34      */
encode(const SkPixmap & pixmap)35     SkData* encode(const SkPixmap& pixmap) { return this->onEncode(pixmap); }
36 
37 protected:
38     /**
39      *  Return true if you want to serialize the encoded data, false if you want
40      *  another version serialized (e.g. the result of this->encode()).
41      */
42     virtual bool onUseEncodedData(const void* data, size_t len) = 0;
43 
44     /**
45      *  If you want to encode these pixels, return the encoded data as an SkData
46      *  Return null if you want to serialize the raw pixels.
47      */
48     virtual SkData* onEncode(const SkPixmap&) = 0;
49 };
50 #endif // SkPixelSerializer_DEFINED
51