]> git.sesse.net Git - kdenlive/blobdiff - src/kthumb.h
Fix indent
[kdenlive] / src / kthumb.h
index 56ebd56016919f8966b64eca9a3b7c3b2fe31a8a..21b01fbff6ff5a94467e86b7f2a635b1a72bbb0a 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
-                         krender.h  -  description
+                         kthumb.h  -  description
                             -------------------
    begin                : Fri Nov 22 2002
    copyright            : (C) 2002 by Jason Wood
 #ifndef KTHUMB_H
 #define KTHUMB_H
 
-#include <qobject.h>
-#include <qpixmap.h>
-#include <qfile.h>
-#include <qthread.h>
+#include <QPixmap>
+#include <QFile>
+#include <QDomElement>
+#include <QFuture>
 
-#include <kurl.h>
+#include <KUrl>
+#include <kdeversion.h>
 
 #include <mlt++/Mlt.h>
 
+
 /**KRender encapsulates the client side of the interface to a renderer.
 From Kdenlive's point of view, you treat the KRender object as the
 renderer, and simply use it as if it was local. Calls are asyncrhonous -
-you send a call out, and then recieve the return value through the
+you send a call out, and then receive the return value through the
 relevant signal that get's emitted once the call completes.
   *@author Jason Wood
   */
 
 
-namespace Mlt {
-    class Miracle;
-    class Consumer;
-    class Producer;
-    class Frame;
-    class Profile;
-};
-
-
-  class MyThread : public QThread {
+namespace Mlt
+{
+class Producer;
+class Frame;
+}
 
-    public:
-        virtual void run();
-       void init(KUrl url, QString target, double frame, double frameLength, int frequency, int channels, int arrayWidth);
-       bool isWorking();
-       bool stop_me;
+class ClipManager;
 
-    private:
-       QFile f;
-       KUrl m_url;
-       double m_frame;
-       double m_frameLength;
-       int m_frequency;
-       int m_channels;
-       int m_arrayWidth;
-       bool m_isWorking;
-    };
+typedef QMap <int, QMap <int, QByteArray> > audioByteArray;
 
+class KThumb: public QObject
+{
+   Q_OBJECT 
+public:
 
-class KThumb:public QObject {
-  Q_OBJECT public:
-
-
-     KThumb(KUrl url, int width, int height, QObject * parent = 0, const char *name = 0);
+    explicit KThumb(ClipManager *clipManager, const KUrl &url, const QString &id, const QString &hash, QObject * parent = 0);
     ~KThumb();
+    void setProducer(Mlt::Producer *producer);
+    bool hasProducer() const;
+    void clearProducer();
+    void updateThumbUrl(const QString &hash);
+    void extractImage(const QList<int> &frames);
+    QImage extractImage(int frame, int width, int height);
+#if KDE_IS_VERSION(4,5,0)
+    /** @brief Request thumbnails for the frame range. */
+    void queryIntraThumbs(const QList <int> &missingFrames);
+    /** @brief Query cached thumbnail. */
+    QImage findCachedThumb(const QString &path);
+#endif
+    void getThumb(int frame);
+    void getGenericThumb(int frame, int height, int type);
 
 public slots:
-       void extractImage( int frame, int frame2);
-       static QPixmap getImage(KUrl url, int width, int height);
-/*     void getImage(KUrl url, int frame, int width, int height);
-       void getThumbs(KUrl url, int startframe, int endframe, int width, int height);*/
-       void stopAudioThumbs();
-       void removeAudioThumb();
-       void getAudioThumbs(KUrl url, int channel, double frame, double frameLength, int arrayWidth);
+    void updateClipUrl(const KUrl &url, const QString &hash);
+    void slotCreateAudioThumbs();
+
+public:
+    static QPixmap getImage(const KUrl &url, int width, int height);
+//    static QPixmap getImage(QDomElement xml, int frame, int width, int height);
+    /* void getImage(KUrl url, int frame, int width, int height);
+     void getThumbs(KUrl url, int startframe, int endframe, int width, int height);*/
+    static QPixmap getImage(const KUrl& url, int frame, int width, int height);
+    static QImage getFrame(Mlt::Producer *producer, int framepos, int frameWidth, int displayWidth, int height);
+    static QImage getFrame(Mlt::Frame *frame, int frameWidth, int displayWidth, int height);
+    /** @brief Calculates image variance, useful to know if a thumbnail is interesting. 
+     *  @return an integer between 0 and 100. 0 means no variance, eg. black image while bigger values mean contrasted image
+     * */
+    static uint imageVariance(const QImage &image);
+
+private slots:
+#if KDE_IS_VERSION(4,5,0)
+    /** @brief Fetch all requested frames. */ 
+    void slotGetIntraThumbs();
+#endif
 
 private:
-       MyThread thumbProducer;
-       KUrl m_url;
-       QString m_thumbFile;
-       int m_width;
-       int m_height;
-       Mlt::Profile *m_profile;
+    KUrl m_url;
+    QString m_thumbFile;
+    double m_dar;
+    double m_ratio;
+    Mlt::Producer *m_producer;
+    ClipManager *m_clipManager;
+    QString m_id;
+    /** @brief Controls the intra frames thumbnails process (cached thumbnails). */
+    QFuture<void> m_intra;
+    /** @brief List of frame numbers from which we want to extract thumbnails. */
+    QList <int> m_intraFramesQueue;
+    QMutex m_mutex;
+    QImage getProducerFrame(int framepos, int frameWidth, int displayWidth, int height);
 
 signals:
-       void thumbReady(int frame, QPixmap pm);
-       void audioThumbReady(QMap <int, QMap <int, QByteArray> >);
+    void thumbReady(int, const QImage&);
+    void mainThumbReady(const QString &, const QPixmap&);
+    void audioThumbReady(const audioByteArray&);
+    /** @brief We have finished caching all requested thumbs. */
+    void thumbsCached();
 };
 
 #endif