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
13class SkData;
14struct SkImageInfo;
15
16/**
17 *  Interface for serializing pixels, e.g. SkBitmaps in an SkPicture.
18 */
19class SkPixelSerializer : public SkRefCnt {
20public:
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     */
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     */
35    SkData* encodePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes) {
36        return this->onEncodePixels(info, pixels, rowBytes);
37    }
38
39protected:
40    /**
41     *  Return true if you want to serialize the encoded data, false if you want
42     *  another version serialized (e.g. the result of encodePixels).
43     */
44    virtual bool onUseEncodedData(const void* data, size_t len) = 0;
45
46    /**
47     *  If you want to encode these pixels, return the encoded data as an SkData
48     *  Return null if you want to serialize the raw pixels.
49     */
50    virtual SkData* onEncodePixels(const SkImageInfo&, const void* pixels, size_t rowBytes) = 0;
51};
52#endif // SkPixelSerializer_DEFINED
53