1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QWEBPHANDLER_P_H
5#define QWEBPHANDLER_P_H
6
7#include <QtGui/qcolor.h>
8#include <QtGui/qcolorspace.h>
9#include <QtGui/qimage.h>
10#include <QtGui/qimageiohandler.h>
11#include <QtCore/qbytearray.h>
12#include <QtCore/qsize.h>
13
14#include "webp/decode.h"
15#include "webp/demux.h"
16
17class QWebpHandler : public QImageIOHandler
18{
19public:
20 QWebpHandler();
21 ~QWebpHandler();
22
23public:
24 bool canRead() const override;
25 bool read(QImage *image) override;
26
27 static bool canRead(QIODevice *device);
28
29 bool write(const QImage &image) override;
30 QVariant option(ImageOption option) const override;
31 void setOption(ImageOption option, const QVariant &value) override;
32 bool supportsOption(ImageOption option) const override;
33
34 int imageCount() const override;
35 int currentImageNumber() const override;
36 QRect currentImageRect() const override;
37 int loopCount() const override;
38 int nextImageDelay() const override;
39
40private:
41 bool ensureScanned() const;
42 bool ensureDemuxer();
43
44private:
45 enum ScanState {
46 ScanError = -1,
47 ScanNotScanned = 0,
48 ScanSuccess = 1,
49 };
50
51 int m_quality;
52 mutable ScanState m_scanState;
53 WebPBitstreamFeatures m_features;
54 uint32_t m_formatFlags;
55 int m_loop;
56 int m_frameCount;
57 QColor m_bgColor;
58 QByteArray m_rawData;
59 WebPData m_webpData;
60 WebPDemuxer *m_demuxer;
61 WebPIterator m_iter;
62 QColorSpace m_colorSpace;
63 QImage *m_composited; // For animation frames composition
64};
65
66#endif // WEBPHANDLER_H
67

source code of qtimageformats/src/plugins/imageformats/webp/qwebphandler_p.h