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#ifndef SkPngChunkReader_DEFINED
9#define SkPngChunkReader_DEFINED
10
11#include "include/core/SkRefCnt.h"
12#include "include/core/SkTypes.h"
13
14/**
15 * SkPngChunkReader
16 *
17 * Base class for optional callbacks to retrieve meta/chunk data out of a PNG
18 * encoded image as it is being decoded.
19 * Used by SkCodec.
20 */
21class SkPngChunkReader : public SkRefCnt {
22public:
23 /**
24 * This will be called by the decoder when it sees an unknown chunk.
25 *
26 * Use by SkCodec:
27 * Depending on the location of the unknown chunks, this callback may be
28 * called by
29 * - the factory (NewFromStream/NewFromData)
30 * - getPixels
31 * - startScanlineDecode
32 * - the first call to getScanlines/skipScanlines
33 * The callback may be called from a different thread (e.g. if the SkCodec
34 * is passed to another thread), and it may be called multiple times, if
35 * the SkCodec is used multiple times.
36 *
37 * @param tag Name for this type of chunk.
38 * @param data Data to be interpreted by the subclass.
39 * @param length Number of bytes of data in the chunk.
40 * @return true to continue decoding, or false to indicate an error, which
41 * will cause the decoder to not return the image.
42 */
43 virtual bool readChunk(const char tag[], const void* data, size_t length) = 0;
44};
45#endif // SkPngChunkReader_DEFINED
46