]> git.sesse.net Git - kdenlive/blobdiff - src/mltdevicecapture.h
Const'ref
[kdenlive] / src / mltdevicecapture.h
index 77d285c4e805fc177c0ecaf04381c37883e98482..ea7291c9acc358faa069c0edcdf5ebdf4f76b75a 100644 (file)
@@ -1,4 +1,4 @@
-/***************************************************************************
+ /***************************************************************************
                          mltdevicecapture.h  -  description
                             -------------------
    begin                : Sun May 21 2011
@@ -30,7 +30,8 @@
 #include <mlt/framework/mlt_types.h>
 
 #include <QtConcurrentRun>
-
+#include <QTimer>
 namespace Mlt
 {
 class Consumer;
@@ -38,7 +39,7 @@ class Frame;
 class Event;
 class Producer;
 class Profile;
-};
+}
 
 class MltDeviceCapture: public AbstractRender
 {
@@ -50,7 +51,7 @@ Q_OBJECT public:
     /** @brief Build a MLT Renderer
      *  @param winid The parent widget identifier (required for SDL display). Set to 0 for OpenGL rendering
      *  @param profile The MLT profile used for the capture (default one will be used if empty). */
-    MltDeviceCapture(QString profile, VideoPreviewContainer *surface, QWidget *parent = 0);
+    explicit MltDeviceCapture(QString profile, VideoSurface *surface, QWidget *parent = 0);
 
     /** @brief Destroy the MLT Renderer. */
     ~MltDeviceCapture();
@@ -61,7 +62,7 @@ Q_OBJECT public:
     bool sendFrameForAnalysis;
 
     /** @brief Someone needs us to send again a frame. */
-    void sendFrameUpdate() {};
+    void sendFrameUpdate() {}
     
     void emitFrameUpdated(Mlt::Frame&);
     void emitFrameNumber(double position);
@@ -74,27 +75,26 @@ Q_OBJECT public:
     /** @brief Starts the MLT Video4Linux process.
      * @param surface The widget onto which the frame should be painted
      */
-    bool slotStartCapture(const QString &params, const QString &path, const QString &playlist, int livePreview, bool xmlPlaylist = true);
+    bool slotStartCapture(const QString &params, const QString &path, const QString &playlist, bool livePreview, bool xmlPlaylist = true);
     bool slotStartPreview(const QString &producer, bool xmlFormat = false);
     /** @brief A frame arrived from the MLT Video4Linux process. */
     void gotCapturedFrame(Mlt::Frame& frame);
     /** @brief Save current frame to file. */
     void captureFrame(const QString &path);
-    void doRefresh();
+    
     /** @brief This will add the video clip from path and add it in the overlay track. */
     void setOverlay(const QString &path);
 
     /** @brief This will add an MLT video effect to the overlay track. */
-    void setOverlayEffect(const QString &tag, QStringList parameters);
+    void setOverlayEffect(const QString &tag, const QStringList &parameters);
 
     /** @brief This will add a horizontal flip effect, easier to work when filming yourself. */
     void mirror(bool activate);
-
-    /** @brief This property is used to decide if the renderer should send audio data for monitoring. */
-    bool analyseAudio;
     
     /** @brief True if we are processing an image (yuv > rgb) when recording. */
     bool processingImage;
+    
+    void pause();
 
 private:
     Mlt::Consumer * m_mltConsumer;
@@ -104,12 +104,12 @@ private:
     QString m_activeProfile;
     int m_droppedFrames;
     /** @brief When true, images will be displayed on monitor while capturing. */
-    int m_livePreview;
+    bool m_livePreview;
     /** @brief Count captured frames, used to display only one in ten images while capturing. */
     int m_frameCount;
 
     /** @brief The surface onto which the captured frames should be painted. */
-    VideoPreviewContainer *m_captureDisplayWidget;
+    VideoSurface *m_captureDisplayWidget;
 
     /** @brief A human-readable description of this renderer. */
     int m_winid;
@@ -117,6 +117,10 @@ private:
     void uyvy2rgb(unsigned char *yuv_buffer, int width, int height);
 
     QString m_capturePath;
+    
+    QTimer m_droppedFramesTimer;
+    
+    QMutex m_mutex;
 
     /** @brief Build the MLT Consumer object with initial settings.
      *  @param profileName The MLT profile to use for the consumer */
@@ -126,25 +130,28 @@ private:
 private slots:
     void slotPreparePreview();
     void slotAllowPreview();
+    /** @brief When capturing, check every second for dropped frames. */
+    void slotCheckDroppedFrames();
   
 signals:
     /** @brief A frame's image has to be shown.
      *
      * Used in Mac OS X. */
-    void showImageSignal(QImage);
+    void showImageSignal(const QImage&);
 
     void frameSaved(const QString &);
     
     void droppedFrames(int);
     
     void unblockPreview();
-    void imageReady(QImage);
+    void imageReady(const QImage &);
 
 
 public slots:
 
     /** @brief Stops the consumer. */
     void stop();
+    void slotDoRefresh();
 };
 
 #endif