]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.h
Fix proxy clips with invalid length not correctly handled and reload clip breaking...
[kdenlive] / src / renderer.h
index 0749ad13ddae6522478a22d0d6d7d972c57d66f4..71ce4ef8e723b051f9f6f97354ff982c6cf105e2 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "gentime.h"
 #include "definitions.h"
+#include "mlt/framework/mlt_types.h"
 
 #include <kurl.h>
 
@@ -90,6 +91,7 @@ Q_OBJECT public:
 
     /** @brief Seeks the renderer clip to the given time. */
     void seek(GenTime time);
+    void seek(int time);
     void seekToFrame(int pos);
     void seekToFrameDiff(int diff);
     int m_isBlocked;
@@ -129,7 +131,7 @@ Q_OBJECT public:
     void stop(const GenTime & startTime);
     int volume() const;
 
-    QImage extractFrame(int frame_position, int width = -1, int height = -1);
+    QImage extractFrame(int frame_position, QString path = QString(), int width = -1, int height = -1);
 
     /** @brief Plays the scene starting from a specific time.
      * @param startTime time to start playing the scene from */
@@ -177,6 +179,8 @@ Q_OBJECT public:
 
     /** @brief Returns display aspect ratio. */
     double dar() const;
+    /** @brief Returns sample aspect ratio. */
+    double sar() const;
 
     /*
      * Playlist manipulation.
@@ -187,7 +191,10 @@ Q_OBJECT public:
     void mltCutClip(int track, GenTime position);
     void mltInsertSpace(QMap <int, int> trackClipStartList, QMap <int, int> trackTransitionStartList, int track, const GenTime duration, const GenTime timeOffset);
     int mltGetSpaceLength(const GenTime pos, int track, bool fromBlankStart);
+
+    /** @brief Returns the duration/length of @param track as reported by the track producer. */
     int mltTrackDuration(int track);
+
     bool mltResizeClipEnd(ItemInfo info, GenTime clipDuration);
     bool mltResizeClipStart(ItemInfo info, GenTime diff);
     bool mltResizeClipCrop(ItemInfo info, GenTime diff);
@@ -252,6 +259,8 @@ Q_OBJECT public:
     void showFrame(Mlt::Frame&);
 
     void showAudio(Mlt::Frame&);
+    /** @brief This property is used to decide if the renderer should send audio data for monitoring. */
+    bool analyseAudio;
     /** @brief This property is used to decide if the renderer should convert it's frames to QImage for use in other Kdenlive widgets. */
     bool sendFrameForAnalysis;
     QList <int> checkTrackSequence(int);
@@ -269,6 +278,7 @@ private:
     Mlt::Profile *m_mltProfile;
     double m_framePosition;
     double m_fps;
+    bool m_externalConsumer;
 
     /** @brief True if we are playing a zone.
      *
@@ -301,6 +311,12 @@ private:
     void buildConsumer(const QString profileName);
     void resetZoneMode();
     void fillSlowMotionProducers();
+    /** @brief Get the track number of the lowest audible (non muted) audio track
+     *  @param return The track number */
+    int getLowestNonMutedAudioTrack(Mlt::Tractor tractor);
+
+    /** @brief Make sure our audio mixing transitions are applied to the lowest track */
+    void fixAudioMixing(Mlt::Tractor tractor);
 
 private slots:
 
@@ -313,7 +329,7 @@ private slots:
 signals:
 
     /** @brief The renderer received a reply to a getFileProperties request. */
-    void replyGetFileProperties(const QString &clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool);
+    void replyGetFileProperties(const QString &clipId, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool, bool);
 
     /** @brief The renderer received a reply to a getImage request. */
     void replyGetImage(const QString &, const QPixmap &);
@@ -327,20 +343,18 @@ signals:
     /** @brief The renderer started rendering. */
     void rendering(const GenTime &);
 
-    /** @brief The rendering has finished.
-        @see consumer_frame_show
-        This signal seems to be useless; use renderPosition(int) instead --Granjow */
-    void renderFinished();
-
-    /* @brief The current seek position has been changed by the renderer.
-    void positionChanged(const GenTime &);*/
-
     /** @brief An error occurred within this renderer. */
     void error(const QString &, const QString &);
     void durationChanged(int);
     void rendererPosition(int);
     void rendererStopped(int);
+    /** @brief The clip is not valid, should be removed from project. */
     void removeInvalidClip(const QString &, bool replaceProducer);
+    /** @brief The proxy is not valid, should be deleted.
+     *  @param id The original clip's id
+     *  @param durationError Should be set to true if the proxy failed because it has not same length as original clip
+     */
+    void removeInvalidProxy(const QString &id, bool durationError);
     void refreshDocumentProducers();
 
     /** @brief A frame's image has to be shown.
@@ -350,6 +364,8 @@ signals:
     void showAudioSignal(const QByteArray);
     /** @brief The renderer refreshed the current frame, but no seeking was done. */
     void frameUpdated(QImage);
+    /** @brief This signal contains the audio of the current frame. */
+    void audioSamplesSignal(const QVector<int16_t>&, int freq, int num_channels, int num_samples);
 
 public slots:
 
@@ -364,10 +380,14 @@ public slots:
     bool isValid(KUrl url);
 
     /** @brief Requests the file properties for the specified URL.
-     *
+        @param xml The xml parameters for the clip
+        @param clipId The clip Id string
+        @param imageHeight The height (in pixels) of the returned thumbnail (height of a treewidgetitem in projectlist)
+        @param replaceProducer If true, the MLT producer will be recreated
+        @param selectClip If true, clip item will be selected in project view
      * Upon return, the result will be emitted via replyGetFileProperties().
      * Wraps the VEML command of the same name. */
-    void getFileProperties(const QDomElement xml, const QString &clipId, int imageHeight, bool replaceProducer = true);
+    void getFileProperties(const QDomElement xml, const QString &clipId, int imageHeight, bool replaceProducer = true, bool selectClip = false);
 
     void exportFileToFirewire(QString srcFileName, int port, GenTime startTime, GenTime endTime);
     void mltSavePlaylist();