summaryrefslogtreecommitdiffstats
path: root/framecache.h
diff options
context:
space:
mode:
Diffstat (limited to 'framecache.h')
-rw-r--r--framecache.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/framecache.h b/framecache.h
new file mode 100644
index 0000000..509fea6
--- /dev/null
+++ b/framecache.h
@@ -0,0 +1,72 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#ifndef FRAMECACHE_H
+#define FRAMECACHE_H
+
+#include <QThread>
+#include <QPair>
+#include <QHash>
+#include <QPair>
+#include <QQueue>
+#include <QString>
+
+class QSemaphore;
+class QMutex;
+class FrameCacheGenerator;
+
+class FrameCache : public QObject {
+ Q_OBJECT
+ public:
+ explicit FrameCache(QObject *parent = 0);
+ ~FrameCache();
+ const QPixmap entry(const QString &sourcePath, const QString &when = QString());
+ const QString entryPath(const QString &sourcePath, const QString &when);
+
+ private:
+ QHash<QPair<QString, QString>, QString> *mFrameCache;
+ QQueue<QPair<QString, QString> > *mDataQueue;
+ QString mCacheFile;
+ qint32 mMagic;
+ QSemaphore *mSemFree;
+ QSemaphore *mSemUsed;
+ QMutex *mCacheMx;
+ FrameCacheGenerator *mGenerator;
+ QString mWhen;
+};
+
+class FrameCacheGenerator : public QThread {
+ Q_OBJECT
+ public:
+ explicit FrameCacheGenerator(QObject *parent = 0);
+ void init(QSemaphore *set, QSemaphore *get, QMutex *cachemx, QQueue<QPair<QString, QString> > *data, QHash<QPair<QString, QString>, QString> *cache);
+ const QString cacheFile() const { return mCacheFile; }
+ qint32 magic() const { return mMagic; };
+ void readConfig();
+ void readCache();
+
+ public slots:
+ void run();
+
+ private:
+ bool grabFrame(const QString &sourceFile, QString when);
+ QSemaphore *mSemFree;
+ QSemaphore *mSemUsed;
+ QMutex *mCacheMx;
+ QQueue<QPair<QString, QString> > *mDataQueue;
+ QHash<QPair<QString, QString>, QString> *mFrameCache;
+ QString mCacheDir;
+ QString mCacheFile;
+ //QString mWhen;
+ QString mFfMpegPath;
+ const qint32 mMagic;
+ const QString mCacheSubDir;
+ const QString mCacheFileName;
+
+};
+
+#endif // FRAMECACHE_H