#include <QPixmap>
#include <QObject>
#include <QTimer>
+#include <QProcess>
+#include <QFuture>
#include <KUrl>
}
/** Sets producers for the current clip (one for each track due to a limitation in MLT's track mixing */
- void setProducer(Mlt::Producer *producer, bool reset = false);
+ void setProducer(Mlt::Producer *producer, bool reset = false, bool readPropertiesFromProducer = false);
/** Retrieve a producer for a track */
Mlt::Producer *producer(int track = -1);
/** Retrieve the producer that shows only video */
void refreshThumbUrl();
const char *producerProperty(const char *name) const;
void setProducerProperty(const char *name, const char *data);
- void clearProducers();
- void deleteProducers();
+ void resetProducerProperty(const char *name);
+ void deleteProducers(bool clearThumbCreator = true);
/** Set default play zone for clip monitor */
void setZone(QPoint zone);
/** Returns true is clip is missing but user wants to keep it as placeholder */
bool isPlaceHolder() const;
+ void setValid();
static QString getHash(const QString &path);
void addCutZone(int in, int out, QString desc = QString());
QList <CutZoneInfo> cutZones() const;
void updateCutZone(int oldin, int oldout, int in, int out, QString desc = QString());
+ bool hasVideoCodec(const QString &codec) const;
+ bool hasAudioCodec(const QString &codec) const;
+ bool checkHash() const;
+ void setPlaceHolder(bool place);
+ QPixmap extractImage(int frame, int width, int height);
+
private: // Private attributes
/** The number of times this clip is used in the project - the number of references to this clip
QMap <QString, QString> m_properties;
/** Holds clip metadata like author, copyright,... */
QMap <QString, QString> m_metadata;
+
+ /** Try to make sure we don't delete a producer while using it */
+ QMutex m_producerMutex;
+
/** Create connections for audio thumbnails */
void slotCreateAudioTimer();
void slotRefreshProducer();
void setProducerProperty(const char *name, int data);
void setProducerProperty(const char *name, double data);
void getFileHash(const QString url);
+ /** @brief When duplicating a producer, make sure all manually set properties are passed to it. */
+ void adjustProducerProperties(Mlt::Producer *prod, const QString &id, bool mute, bool blind);
+ /** @brief Create another instance of a producer. */
+ Mlt::Producer *cloneProducer(Mlt::Producer *source);
+
public slots:
void updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data);
bool slotGetAudioThumbs();
QList < CommentedTime > commentedSnapMarkers() const;
- void setSnapMarkers(QList < CommentedTime > markers);
GenTime findNextSnapMarker(const GenTime & currTime);
GenTime findPreviousSnapMarker(const GenTime & currTime);
GenTime hasSnapMarkers(const GenTime & time);
void setMetadata(QMap <QString, QString> properties);
QMap <QString, QString> properties() const;
QMap <QString, QString> metadata() const;
-
+ void slotExtractImage(int frame, int frame2);
signals:
- void getAudioThumbs();
void gotAudioData();
+ /** @brief Generate a proxy clip (lower resolution copy) named like the clip's hash. */
+ void createProxy(const QString id);
+ /** @brief Abort creation of the proxy clip (lower resolution copy). */
+ void abortProxy(const QString id, const QString proxyPath);
};
#endif