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
18
19class QImage;
20class QWidget;
21
22class KRITAUI_EXPORT KisMediaEncoderFormat
23{
24public:
25 enum class Type {
26 AndroidMediaEncoder,
27 LibavMediaEncoder,
28 };
29
30 virtual ~KisMediaEncoderFormat() = default;
31
32 virtual Type type() const = 0;
33 virtual QString key() const = 0;
34 virtual QString title() const = 0;
35 virtual QString extension() const = 0;
36 virtual bool supportsAudio() const = 0;
37
38 virtual QWidget *createPreferencesWidget(const QVariantMap &preferences) const = 0;
39 virtual void resetPreferencesWidget(QWidget *widget) const = 0;
40 virtual QVariantMap getPreferencesFromWidget(QWidget *widget) const = 0;
41
42protected:
44};
45
60
61// Intentionally not exported, this is only needed internally.
62class KisMediaEncoderRunnable : public QObject, public QRunnable
63{
64 Q_OBJECT
65 Q_DISABLE_COPY_MOVE(KisMediaEncoderRunnable)
66public:
67 void run() override;
68
69public Q_SLOTS:
71
72Q_SIGNALS:
73 void sigStarted();
76 void sigFailed(const QString &errorMessage);
77 void sigProgressUpdated(int frameNo);
78
79protected:
80 enum class EncodeResult {
83 Failed,
84 };
85
86 class Frame
87 {
88 public:
89 explicit Frame(const QString &path = QString(), int instances = 0)
90 : m_path(path)
92 {
93 }
94
95 const QString &path() const
96 {
97 return m_path;
98 }
99
100 int instances() const
101 {
102 return m_instances;
103 }
104
105 bool readImage(QImage &outImage) const;
106
107 private:
108 QString m_path;
110 };
111
113
114 virtual EncodeResult encode(QString &outErrorMessage) = 0;
115
117 {
118 return m_settings;
119 }
120
121 bool isCancelled() const
122 {
123 return m_cancel;
124 }
125
126 void setOutputFrameNoMultiplier(double outputFrameNoMultiplier)
127 {
128 m_outputFrameNoMultiplier = outputFrameNoMultiplier;
129 }
130
131 bool nextFrame(Frame &outFrame);
132 void rewindFrames();
133
134private:
135 EncodeResult prepareAndEncode(QString &outErrorMessage);
136
138 double m_inputTime = 0.0;
140 double m_outputFrameNo = 0.0;
144 bool m_cancel = false;
145};
146
147class KRITAUI_EXPORT KisMediaEncoderWrapper : public QObject
148{
149 Q_OBJECT
150 Q_DISABLE_COPY_MOVE(KisMediaEncoderWrapper)
151public:
152 explicit KisMediaEncoderWrapper(QObject *parent = nullptr);
153 ~KisMediaEncoderWrapper() override;
154
155 KisImportExportErrorCode start(const KisMediaEncoderWrapperSettings &settings, bool batchMode);
156 void startNonBlocking(const KisMediaEncoderWrapperSettings &settings);
157 void reset();
158
159 static const QVector<KisMediaEncoderFormat *> &getSupportedFormats();
160 static KisMediaEncoderFormat *getFormatByKey(const QString &key);
161
162Q_SIGNALS:
165 void sigFinishedWithError(QString message);
166 void sigProgressUpdated(int frameNo);
168
169private:
170 static KisMediaEncoderRunnable *makeSupportedRunnable(const KisMediaEncoderWrapperSettings &settings);
171
173};
174
175#endif
virtual bool supportsAudio() const =0
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)
void setOutputFrameNoMultiplier(double outputFrameNoMultiplier)
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)