]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.h
Rotoscoping: import keyframes generated by tracker.
[kdenlive] / src / renderer.h
index ddd10a447078512b0481ad11b544f2f927504bcb..b20afea559e09d92264e583824bed2cc51ade133 100644 (file)
@@ -91,7 +91,7 @@ Q_OBJECT public:
 
     /** @brief Seeks the renderer clip to the given time. */
     void seek(GenTime time);
-    void seekToFrame(int pos);
+    void seek(int time);
     void seekToFrameDiff(int diff);
     int m_isBlocked;
 
@@ -130,7 +130,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 */
@@ -178,6 +178,8 @@ Q_OBJECT public:
 
     /** @brief Returns display aspect ratio. */
     double dar() const;
+    /** @brief Returns sample aspect ratio. */
+    double sar() const;
 
     /*
      * Playlist manipulation.
@@ -188,7 +190,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);
@@ -260,6 +265,9 @@ Q_OBJECT public:
     QList <int> checkTrackSequence(int);
     void sendFrameUpdate();
 
+    /** @brief Returns a pointer to the main producer. */
+    Mlt::Producer *getProducer();
+
 private:
 
     /** @brief The name of this renderer.
@@ -305,6 +313,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:
 
@@ -317,7 +331,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 &);
@@ -331,20 +345,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.
@@ -354,7 +366,8 @@ signals:
     void showAudioSignal(const QByteArray);
     /** @brief The renderer refreshed the current frame, but no seeking was done. */
     void frameUpdated(QImage);
-    void audioSamplesSignal(const QVector<int16_t> data, const int freq, const int num_channels, const int num_samples);
+    /** @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:
 
@@ -369,16 +382,21 @@ 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();
     void slotSplitView(bool doit);
     void slotSwitchFullscreen();
     void slotSetVolume(int volume);
+    void seekToFrame(int pos);
 };
 
 #endif