mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-11-30 12:02:42 -05:00
Add plugin for AV1 Image File Format (AVIF)
This commit is contained in:
committed by
Albert Astals Cid
parent
a6ec69d276
commit
34a9ec1b06
80
src/imageformats/avif_p.h
Normal file
80
src/imageformats/avif_p.h
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
AV1 Image File Format (AVIF) support for QImage.
|
||||
|
||||
SPDX-FileCopyrightText: 2020 Daniel Novomesky <dnovomesky@gmail.com>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#ifndef KIMG_AVIF_P_H
|
||||
#define KIMG_AVIF_P_H
|
||||
|
||||
#include <QImage>
|
||||
#include <QVariant>
|
||||
#include <qimageiohandler.h>
|
||||
#include <QImageIOPlugin>
|
||||
#include <QByteArray>
|
||||
#include <avif/avif.h>
|
||||
|
||||
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:
|
||||
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
|
||||
Reference in New Issue
Block a user