#ifndef STILLIMAGECACHE_H #define STILLIMAGECACHE_H #include #include #include "common/rational.h" #include "project/item/footage/videostream.h" #include "render/texture.h" namespace olive { class StillImageCache { public: struct Entry { Entry(TexturePtr t, VideoStream* s, const QString& cs, bool a, int d, const rational& i, bool w) { texture = t; stream = s; colorspace = cs; alpha_is_associated = a; divider = d; time = i; working = w; } TexturePtr texture; VideoStream* stream; QString colorspace; bool alpha_is_associated; int divider; rational time; bool working; }; using EntryPtr = std::shared_ptr; QMutex* mutex() { return &mutex_; } QWaitCondition* wait_cond() { return &wait_cond_; } const QVector& entries() const { return entries_; } static bool CompareEntryMetadata(EntryPtr a, EntryPtr b) { return (a->stream == b->stream && a->colorspace == b->colorspace && a->alpha_is_associated == b->alpha_is_associated && a->divider == b->divider && a->time == b->time); } void PushEntry(EntryPtr e) { entries_.prepend(e); if (entries_.size() > 8) { entries_.removeLast(); } } private: QMutex mutex_; QWaitCondition wait_cond_; QVector entries_; }; } #endif // STILLIMAGECACHE_H