26 #include <MltService.h>
27 #include <MltProducer.h>
28 #include <MltAnimation.h>
30 #include "qmlmetadata.h"
31 #include "shotcut_mlt_properties.h"
36 class QmlFilter :
public QObject
39 Q_PROPERTY(
bool isNew READ isNew)
40 Q_PROPERTY(QString path READ path)
41 Q_PROPERTY(QStringList presets READ presets NOTIFY presetsChanged)
42 Q_PROPERTY(
int in READ in NOTIFY inChanged)
43 Q_PROPERTY(
int out READ out NOTIFY outChanged)
44 Q_PROPERTY(
int animateIn READ animateIn WRITE setAnimateIn NOTIFY animateInChanged)
45 Q_PROPERTY(
int animateOut READ animateOut WRITE setAnimateOut NOTIFY animateOutChanged)
46 Q_PROPERTY(
int duration READ duration NOTIFY durationChanged)
47 Q_PROPERTY(
bool blockSignals READ signalsBlocked WRITE blockSignals)
59 enum CurrentFilterIndex {
61 DeselectCurrentFilter = -2
63 Q_ENUM(CurrentFilterIndex)
66 explicit QmlFilter(Mlt::Service& mltService,
const QmlMetadata* metadata, QObject *parent =
nullptr);
69 bool isNew()
const {
return m_isNew; }
70 void setIsNew(
bool isNew) { m_isNew = isNew; }
72 Q_INVOKABLE QString get(QString name,
int position = -1);
73 Q_INVOKABLE
double getDouble(QString name,
int position = -1);
74 Q_INVOKABLE QRectF getRect(QString name,
int position = -1);
75 Q_INVOKABLE
void removeRectPercents(QString name);
76 Q_INVOKABLE QStringList getGradient(QString name);
77 Q_INVOKABLE
void set(QString name, QString value,
int position = -1);
78 Q_INVOKABLE
void set(QString name,
double value,
79 int position = -1, mlt_keyframe_type keyframeType = mlt_keyframe_type(-1));
80 Q_INVOKABLE
void set(QString name,
int value,
81 int position = -1, mlt_keyframe_type keyframeType = mlt_keyframe_type(-1));
82 Q_INVOKABLE
void set(QString name,
bool value,
83 int position = -1, mlt_keyframe_type keyframeType = mlt_keyframe_type(-1));
84 Q_INVOKABLE
void set(QString name,
double x,
double y,
double width,
double height,
double opacity = 1.0,
85 int position = -1, mlt_keyframe_type keyframeType = mlt_keyframe_type(-1));
86 Q_INVOKABLE
void set(QString name,
const QRectF& rect,
double opacity = 1.0,
87 int position = -1, mlt_keyframe_type keyframeType = mlt_keyframe_type(-1));
88 Q_INVOKABLE
void setGradient(QString name,
const QStringList& gradient);
89 QString path()
const {
return m_path; }
90 Q_INVOKABLE
void loadPresets();
91 QStringList presets()
const {
return m_presets; }
93 Q_INVOKABLE
int savePreset(
const QStringList& propertyNames,
const QString& name = QString());
94 Q_INVOKABLE
void deletePreset(
const QString& name);
95 Q_INVOKABLE
void analyze(
bool isAudio =
false);
96 Q_INVOKABLE
static int framesFromTime(
const QString& time);
97 Q_INVOKABLE
static QString timeFromFrames(
int frames, TimeFormat format = TIME_TIMECODE_DF);
98 Q_INVOKABLE
void getHash();
99 Mlt::Producer& producer() {
return m_producer; }
102 Mlt::Service& service() {
return m_service; }
104 void setAnimateIn(
int value);
106 void setAnimateOut(
int value);
107 void clearAnimateInOut();
109 Q_INVOKABLE
void resetProperty(
const QString& name);
110 Q_INVOKABLE
void clearSimpleAnimation(
const QString& name);
111 Mlt::Animation getAnimation(
const QString& name);
112 Q_INVOKABLE
int keyframeCount(
const QString& name);
113 mlt_keyframe_type getKeyframeType(Mlt::Animation& animation,
int position, mlt_keyframe_type defaultType);
114 Q_INVOKABLE
int getNextKeyframePosition(
const QString& name,
int position);
115 Q_INVOKABLE
int getPrevKeyframePosition(
const QString& name,
int position);
116 Q_INVOKABLE
bool isAtLeastVersion(
const QString& version);
117 Q_INVOKABLE
static void deselect();
118 bool allowTrim()
const;
119 bool allowAnimateIn()
const;
120 bool allowAnimateOut()
const;
123 void preset(
const QString& name);
126 void presetsChanged();
127 void analyzeFinished(
bool isSuccess);
129 void changed(QString name);
130 void inChanged(
int delta);
131 void outChanged(
int delta);
132 void animateInChanged();
133 void animateOutChanged();
134 void animateInOutChanged();
135 void durationChanged();
136 void propertyChanged(QString name);
139 const QmlMetadata* m_metadata;
140 Mlt::Service m_service;
141 Mlt::Producer m_producer;
144 QStringList m_presets;
146 QString objectNameOrService();
147 int keyframeIndex(Mlt::Animation& animation,
int position);
150 class AnalyzeDelegate :
public QObject
154 explicit AnalyzeDelegate(Mlt::Filter& filter);
157 void onAnalyzeFinished(AbstractJob *job,
bool isSuccess);
160 QString resultsFromXml(
const QString& fileName,
const QString& serviceName);
161 void updateFilter(Mlt::Filter& filter,
const QString& results);
162 void updateJob(EncodeJob* job,
const QString& results);
165 QString m_serviceName;