From 1bcbb69e31090cf71e913419299b52dd4d094bef Mon Sep 17 00:00:00 2001 From: Arno Date: Fri, 29 Mar 2013 12:55:36 +0100 Subject: Make FrameCache threaded create snapshot pics in a separate thread. Also use the first frame available if the clip isn't long enough for the configured frame. --- framecache.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 framecache.h (limited to 'framecache.h') 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 +#include +#include +#include +#include +#include + +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, QString> *mFrameCache; + QQueue > *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 > *data, QHash, 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 > *mDataQueue; + QHash, QString> *mFrameCache; + QString mCacheDir; + QString mCacheFile; + //QString mWhen; + QString mFfMpegPath; + const qint32 mMagic; + const QString mCacheSubDir; + const QString mCacheFileName; + +}; + +#endif // FRAMECACHE_H -- cgit v1.2.3-70-g09d2