00001
00002
00003
00004 #include <stdint.h>
00005
00006
00007 #include <qmap.h>
00008 #include <qrect.h>
00009 #include <qmutex.h>
00010 #include <qstring.h>
00011 #include <qasciicache.h>
00012
00013 class OSDImageCacheValue
00014 {
00015 public:
00016 OSDImageCacheValue(QString cacheKey,
00017 unsigned char *yuv, unsigned char *ybuffer,
00018 unsigned char *ubuffer, unsigned char *vbuffer,
00019 unsigned char *alpha, QRect imagesize);
00020
00021 virtual ~OSDImageCacheValue();
00022
00023 uint GetSize(void) const { return m_size_in_bytes; }
00024 QString GetKey(void) const { return m_cacheKey; }
00025
00026 public:
00027 unsigned char *m_yuv;
00028 unsigned char *m_ybuffer;
00029 unsigned char *m_ubuffer;
00030 unsigned char *m_vbuffer;
00031 unsigned char *m_alpha;
00032 QRect m_imagesize;
00033
00034 private:
00035 uint m_size_in_bytes;
00036 QString m_cacheKey;
00037 };
00038
00039 typedef QAsciiCache<OSDImageCacheValue> img_cache_t;
00040
00041 class OSDImageCache
00042 {
00043 public:
00044 OSDImageCache();
00045 virtual ~OSDImageCache();
00046
00047 bool InFileCache(const QString &key) const;
00048
00049 bool Contains(const QString &key, bool useFile) const;
00050
00051 OSDImageCacheValue *Get(const QString &key, bool useFile);
00052
00053 void Insert(OSDImageCacheValue* value);
00054
00055 void SaveToDisk(const OSDImageCacheValue *value);
00056
00057 void Reset(void);
00058
00059 static QString CreateKey(const QString &filename,
00060 float wmult, float hmult,
00061 int scalew, int scaleh);
00062
00063 static QString ExtractOriginal(const QString &key);
00064
00065 private:
00066 mutable QMutex m_cacheLock;
00067 img_cache_t m_imageCache;
00068 int m_memHits;
00069 int m_diskHits;
00070 int m_misses;
00071
00073 static uint kMaximumMemoryCacheSize;
00074 };