/* AV1 Image File Format (AVIF) support for QImage. SPDX-FileCopyrightText: 2020 Daniel Novomesky SPDX-License-Identifier: BSD-2-Clause */ #ifndef KIMG_AVIF_P_H #define KIMG_AVIF_P_H #include #include #include #include #include #include #include class QAVIFHandler : public QImageIOHandler { public: QAVIFHandler(); ~QAVIFHandler(); bool canRead() const override; bool read (QImage *image) override; bool write (const QImage &image) override; static bool canRead (QIODevice *device); QVariant option (ImageOption option) const override; void setOption (ImageOption option, const QVariant &value) override; bool supportsOption (ImageOption option) const override; int imageCount() const override; int currentImageNumber() const override; bool jumpToNextImage() override; bool jumpToImage (int imageNumber) override; int nextImageDelay() const override; int loopCount() const override; private: static QPointF CompatibleChromacity(qreal chrX, qreal chrY); bool ensureParsed() const; bool ensureDecoder(); bool decode_one_frame(); enum ParseAvifState { ParseAvifError = -1, ParseAvifNotParsed = 0, ParseAvifSuccess = 1, }; ParseAvifState m_parseState; int m_quality; uint32_t m_container_width; uint32_t m_container_height; QByteArray m_rawData; avifROData m_rawAvifData; avifDecoder *m_decoder; QImage m_current_image; bool m_must_jump_to_next_image; }; class QAVIFPlugin : public QImageIOPlugin { Q_OBJECT Q_PLUGIN_METADATA (IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "avif.json") public: Capabilities capabilities (QIODevice *device, const QByteArray &format) const override; QImageIOHandler *create (QIODevice *device, const QByteArray &format = QByteArray()) const override; }; #endif // KIMG_AVIF_P_H