]> git.sesse.net Git - kdenlive/blobdiff - src/renderer.h
Finally fixed the proxy crash,
[kdenlive] / src / renderer.h
index 69626224bb5bb16c53b7968fd655d60c153b11b1..39690902bb8cd32b2d151ce1d7a166fcc8f78d5f 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "gentime.h"
 #include "definitions.h"
+#include "abstractmonitor.h"
 #include "mlt/framework/mlt_types.h"
 
 #include <kurl.h>
@@ -40,9 +41,7 @@
 #include <qmap.h>
 #include <QList>
 #include <QEvent>
-
-
-class Render;
+#include <QMutex>
 
 class QTimer;
 class QPixmap;
@@ -73,7 +72,8 @@ private:
     QString m_message;
 };
 
-class Render: public QObject
+
+class Render: public AbstractRender
 {
 Q_OBJECT public:
 
@@ -87,12 +87,11 @@ Q_OBJECT public:
     Render(const QString & rendererName, int winid, QString profile = QString(), QWidget *parent = 0);
 
     /** @brief Destroy the MLT Renderer. */
-    ~Render();
+    virtual ~Render();
 
     /** @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;
 
@@ -123,7 +122,7 @@ Q_OBJECT public:
      * The speed is relative to normal playback, e.g. 1.0 is normal speed, 0.0
      * is paused, -1.0 means play backwards. It does not specify start/stop */
     void play(double speed);
-    void switchPlay();
+    void switchPlay(bool play);
     void pause();
 
     /** @brief Stops playing.
@@ -131,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 */
@@ -167,7 +166,11 @@ Q_OBJECT public:
 
     /** @brief Turns on or off on screen display. */
     void refreshDisplay();
-    int resetProfile(const QString profileName);
+    /** @brief Change the Mlt PROFILE
+     * @param profileName The MLT profile name
+     * @param dropSceneList If true, the current playlist will be deleted
+     * . */
+    int resetProfile(const QString profileName, bool dropSceneList = false);
     double fps() const;
 
     /** @brief Returns the width of a frame for this profile. */
@@ -261,11 +264,13 @@ Q_OBJECT public:
     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);
     void sendFrameUpdate();
 
+    /** @brief Returns a pointer to the main producer. */
+    Mlt::Producer *getProducer();
+
 private:
 
     /** @brief The name of this renderer.
@@ -296,6 +301,7 @@ private:
     QString m_activeProfile;
 
     QTimer *m_osdTimer;
+    QMutex m_mutex;
 
     /** @brief A human-readable description of this renderer. */
     int m_winid;
@@ -343,14 +349,6 @@ 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);
@@ -363,17 +361,16 @@ signals:
      *  @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();
+    void refreshDocumentProducers(bool displayRatioChanged, bool fpsChanged);
+    
+    /** @brief If we will delete the producer, make sure to pause the monitor */
+    void blockClipMonitor(const QString);
 
     /** @brief A frame's image has to be shown.
      *
      * Used in Mac OS X. */
     void showImageSignal(QImage);
     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:
 
@@ -402,6 +399,7 @@ public slots:
     void slotSplitView(bool doit);
     void slotSwitchFullscreen();
     void slotSetVolume(int volume);
+    void seekToFrame(int pos);
 };
 
 #endif