Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMediaEncoderWrapper.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: GPL-3.0-or-later
3 */
4#ifndef KISMEDIAENCODERWRAPPER
5#define KISMEDIAENCODERWRAPPER
6
7#include <QDir>
8#include <QObject>
9#include <QPointer>
10#include <QRunnable>
11#include <QSize>
12#include <QVariantMap>
13#include <QVector>
14
15#include <kritaui_export.h>
16
17class QImage;
18class QWidget;
19
20class KRITAUI_EXPORT KisMediaEncoderFormat
21{
22public:
23 enum class Type {
24 AndroidMediaEncoder,
25 };
26
27 virtual ~KisMediaEncoderFormat() = default;
28
29 virtual Type type() const = 0;
30 virtual QString key() const = 0;
31 virtual QString title() const = 0;
32 virtual QString extension() const = 0;
33
34 virtual QWidget *createPreferencesWidget(const QVariantMap &preferences) const = 0;
35 virtual void resetPreferencesWidget(QWidget *widget) const = 0;
36 virtual QVariantMap getPreferencesFromWidget(QWidget *widget) const = 0;
37
38protected:
40};
41
53
54// Intentionally not exported, this is only needed internally.
55class KisMediaEncoderRunnable : public QObject, public QRunnable
56{
57 Q_OBJECT
58 Q_DISABLE_COPY_MOVE(KisMediaEncoderRunnable)
59public:
60 void run() override;
61
62public Q_SLOTS:
64
65Q_SIGNALS:
66 void sigStarted();
69 void sigFailed(const QString &errorMessage);
70 void sigProgressUpdated(int frameNo);
71
72protected:
73 enum class EncodeResult {
76 Failed,
77 };
78
79 class Frame
80 {
81 public:
82 explicit Frame(const QString &path = QString(), int instances = 0)
83 : m_path(path)
85 {
86 }
87
88 int instances() const
89 {
90 return m_instances;
91 }
92
93 bool readImage(QImage &outImage) const;
94
95 private:
96 QString m_path;
98 };
99
101
102 virtual EncodeResult encode(QString &outErrorMessage) = 0;
103
105 {
106 return m_settings;
107 }
108
109 bool isCancelled() const
110 {
111 return m_cancel;
112 }
113
114 bool nextFrame(Frame &outFrame);
115
116private:
117 EncodeResult prepareAndEncode(QString &outErrorMessage);
118
120 double m_inputTime = 0.0;
125 bool m_cancel = false;
126};
127
128class KRITAUI_EXPORT KisMediaEncoderWrapper : public QObject
129{
130 Q_OBJECT
131 Q_DISABLE_COPY_MOVE(KisMediaEncoderWrapper)
132public:
133 explicit KisMediaEncoderWrapper(QObject *parent = nullptr);
134 ~KisMediaEncoderWrapper() override;
135
136 void startNonBlocking(const KisMediaEncoderWrapperSettings &settings);
137 void reset();
138
139 static const QVector<KisMediaEncoderFormat *> &getSupportedFormats();
140 static KisMediaEncoderFormat *getFormatByKey(const QString &key);
141
142Q_SIGNALS:
145 void sigFinishedWithError(QString message);
146 void sigProgressUpdated(int frameNo);
148
149private:
150 static KisMediaEncoderRunnable *makeSupportedRunnable(const KisMediaEncoderWrapperSettings &settings);
151
153};
154
155#endif
virtual QString extension() const =0
virtual QString key() const =0
virtual QString title() const =0
virtual Type type() const =0
virtual ~KisMediaEncoderFormat()=default
virtual QWidget * createPreferencesWidget(const QVariantMap &preferences) const =0
virtual QVariantMap getPreferencesFromWidget(QWidget *widget) const =0
KisMediaEncoderFormat()=default
virtual void resetPreferencesWidget(QWidget *widget) const =0
bool readImage(QImage &outImage) const
Frame(const QString &path=QString(), int instances=0)
KisMediaEncoderRunnable(const KisMediaEncoderWrapperSettings &settings, QObject *parent)
const KisMediaEncoderWrapperSettings settings()
bool nextFrame(Frame &outFrame)
KisMediaEncoderWrapperSettings m_settings
void sigFailed(const QString &errorMessage)
EncodeResult prepareAndEncode(QString &outErrorMessage)
virtual EncodeResult encode(QString &outErrorMessage)=0
void sigProgressUpdated(int frameNo)
void sigFinishedWithError(QString message)
QPointer< KisMediaEncoderRunnable > m_runnable
void sigProgressUpdated(int frameNo)