#include <QTimer>
#include <KUrl>
-#include <klocale.h>
#include "gentime.h"
#include "definitions.h"
class KThumb;
class ClipManager;
-class CommentedTime {
-public:
- CommentedTime(): t(GenTime(0)) {}
- CommentedTime(const GenTime time, QString comment)
- : t(time), c(comment) { }
-
- QString comment() const {
- return (c.isEmpty() ? i18n("Marker") : c);
- }
- GenTime time() const {
- return t;
- }
- void setComment(QString comm) {
- c = comm;
- }
-private:
- GenTime t;
- QString c;
+namespace Mlt
+{
+class Producer;
};
-class DocClipBase: public QObject {
+class DocClipBase: public QObject
+{
Q_OBJECT public:
/** this enum determines the types of "feed" available within this clip. types must be non-exclusive
- * - e.g. if you can have audio and video seperately, it should be possible to combin the two, as is
+ * - e.g. if you can have audio and video separately, it should be possible to combin the two, as is
* done here. If a new clip type is added then it should be possible to combine it with both audio
* and video. */
- DocClipBase(ClipManager *clipManager, QDomElement xml, uint id);
- DocClipBase(const DocClipBase& clip);
- DocClipBase & operator=(const DocClipBase & clip);
+ DocClipBase(ClipManager *clipManager, QDomElement xml, const QString &id);
+// DocClipBase & operator=(const DocClipBase & clip);
virtual ~ DocClipBase();
- /** sets the name of this clip. */
- void setName(const QString name);
-
/** returns the name of this clip. */
- const QString & name() const;
-
- /** Sets the description for this clip. */
- void setDescription(const QString & descripton);
+ const QString name() const;
/** Returns the description of this clip. */
- const QString & description() const;
+ const QString description() const;
+ /** Does this clip need a transparent background (e.g. for titles). */
+ bool isTransparent() const;
+
+ /** Returns any property of this clip. */
+ const QString getProperty(const QString prop) const;
+ void setProperty(const QString &key, const QString &value);
+ void clearProperty(const QString &key);
/** Returns the internal unique id of the clip. */
- uint getId() const;
- void setId(const uint &newId);
+ const QString &getId() const;
+ void setId(const QString &newId);
//KThumb *thumbCreator;
bool audioThumbCreated() const;
+ /*void getClipMainThumb();*/
/** returns the duration of this clip */
const GenTime & duration() const;
+ const GenTime maxDuration() const;
/** returns the duration of this clip */
void setDuration(GenTime dur);
return false;
}
- /*virtual DocClipAVFile *toDocClipAVFile() {
- return 0;
- }
-
- virtual DocClipTextFile *toDocClipTextFile() {
- return 0;
- }
-
- virtual bool isDocClipTextFile() const {
- return false;
- }
-
- virtual bool isDocClipVirtual() const {
- return false;
- }
-
- virtual DocClipVirtual *toDocClipVirtual() {
- return 0;
- }*/
+ /** 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);
+ /** Retrieve a producer for a track */
+ Mlt::Producer *producer(int track = -1);
+ /** Retrieve the producer that shows only video */
+ Mlt::Producer *videoProducer();
+ /** Retrieve the producer that shows only audio */
+ Mlt::Producer *audioProducer(int track);
/** Returns true if this clip is a project clip, false otherwise. Overridden in DocClipProject,
* where it returns true. */
bool isProjectClip() const {
return false;
}
- // Appends scene times for this clip to the passed vector.
- /* virtual void populateSceneTimes(QList < GenTime >
- &toPopulate) const = 0;*/
/** Reads in the element structure and creates a clip out of it.*/
// Returns an XML document that describes part of the current scene.
const GenTime & endTime) const;
/** returns a QString containing all of the XML data required to recreate this clip. */
QDomElement toXML() const;
- QDomDocument generateSceneList(bool addProducers = true, bool rendering = false) const;
/** Returns true if the xml passed matches the values in this clip */
bool matchesXML(const QDomElement & element) const;
/** Returns the thumbnail used by this clip */
const QPixmap & thumbnail() const;
- static DocClipBase *createClip(KdenliveDoc *doc, const QDomElement & element);
/** Cache for every audio Frame with 10 Bytes */
/** format is frame -> channel ->bytes */
- QMap<int, QMap<int, QByteArray> > audioFrameChache;
+ QMap<int, QMap<int, QByteArray> > m_audioFrameCache;
- /** Clip is ready to get thumbs */
- void slotRequestAudioThumbs();
/** Free cache data */
void slotClearAudioCache();
- /** puts the clip in a group (used for folder grouping) */
- void setGroup(const QString name, const QString id);
-
+ void askForAudioThumbs();
+ QString getClipHash() const;
+ void refreshThumbUrl();
+ const char *producerProperty(const char *name) const;
+ void setProducerProperty(const char *name, const char *data);
+ void clearProducers();
+ void deleteProducers();
+
+ /** Set default play zone for clip monitor */
+ void setZone(QPoint zone);
+ /** Get default play zone for clip monitor */
+ QPoint zone() const;
+
+ /** Returns true is clip is missing but user wants to keep it as placeholder */
+ bool isPlaceHolder() const;
+ static QString getHash(const QString &path);
private: // Private attributes
- /** The name of this clip */
- QString m_name;
- /** A description of this clip */
- QString m_description;
+
/** The number of times this clip is used in the project - the number of references to this clip
* that exist. */
uint m_refcount;
-
+ QList <Mlt::Producer *> m_baseTrackProducers;
+ QList <Mlt::Producer *> m_audioTrackProducers;
+ Mlt::Producer *m_videoOnlyProducer;
CLIPTYPE m_clipType;
/** A list of snap markers; these markers are added to a clips snap-to points, and are displayed as necessary. */
QList < CommentedTime > m_snapMarkers;
- QDomElement m_xml;
/** A thumbnail for this clip */
QPixmap m_thumbnail;
bool m_audioThumbCreated;
/** a unique numeric id */
- uint m_id;
- uint m_projectThumbFrame;
- void setAudioThumbCreated(bool isDone);
+ QString m_id;
+ /** Wheter the clip is a placeholder (clip missing but user wants to see it) */
+ bool m_placeHolder;
+
+ void setAudioThumbCreated(bool isDone);
+ /** Holds clip infos like fps, size,... */
QMap <QString, QString> m_properties;
+ /** Holds clip metadata like author, copyright,... */
+ QMap <QString, QString> m_metadata;
+ /** 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);
public slots:
void updateAudioThumbnail(QMap<int, QMap<int, QByteArray> > data);
- void slotGetAudioThumbs();
+ bool slotGetAudioThumbs();
QList < CommentedTime > commentedSnapMarkers() const;
void setSnapMarkers(QList < CommentedTime > markers);
GenTime findNextSnapMarker(const GenTime & currTime);
void addSnapMarker(const GenTime & time, QString comment);
QList < GenTime > snapMarkers() const;
QString markerComment(GenTime t);
- void setProjectThumbFrame(const uint &ix);
- uint getProjectThumbFrame() const;
+ void setClipThumbFrame(const uint &ix);
+ uint getClipThumbFrame() const;
void setProperties(QMap <QString, QString> properties);
- QMap <QString, QString> properties();
+ void setMetadata(QMap <QString, QString> properties);
+ QMap <QString, QString> properties() const;
+ QMap <QString, QString> metadata() const;
+
signals:
void getAudioThumbs();