3 #include "framecache.h"
13 FrameCacheItem::FrameCacheItem()
18 frame_rate = (double)30000.0 / 1001;
21 FrameCacheItem::~FrameCacheItem()
26 int FrameCacheItem::get_size()
28 if(data) return data->get_data_size() + (path ? strlen(path) : 0);
46 FrameCache::FrameCache()
51 FrameCache::~FrameCache()
56 // Returns 1 if frame exists in cache and copies it to the frame argument.
57 int FrameCache::get_frame(VFrame *frame,
61 lock->lock("FrameCache::get_frame");
62 FrameCacheItem *result = 0;
64 if(frame_exists(frame,
71 frame->copy_from(result->data);
72 frame->copy_stacks(result->data);
74 result->age = get_age();
83 VFrame* FrameCache::get_frame_ptr(int64_t position,
89 lock->lock("FrameCache::get_frame_ptr");
90 FrameCacheItem *result = 0;
91 if(frame_exists(position,
98 result->age = get_age();
107 // Puts frame in cache if enough space exists and the frame doesn't already
109 void FrameCache::put_frame(VFrame *frame,
114 lock->lock("FrameCache::put_frame");
115 FrameCacheItem *item = 0;
116 if(frame_exists(frame,
121 item->age = get_age();
127 item = new FrameCacheItem;
131 item->data = new VFrame(*frame);
139 item->position = position;
140 item->frame_rate = frame_rate;
141 item->age = get_age();
150 int FrameCache::frame_exists(VFrame *format,
153 FrameCacheItem **item_return)
155 FrameCacheItem *item = (FrameCacheItem*)get_item(position);
156 while(item && item->position == position)
158 if(EQUIV(item->frame_rate, frame_rate) &&
159 format->equivalent(item->data, 1))
165 item = (FrameCacheItem*)item->next;
170 int FrameCache::frame_exists(int64_t position,
175 FrameCacheItem **item_return)
177 FrameCacheItem *item = (FrameCacheItem*)get_item(position);
178 while(item && item->position == position)
180 if(EQUIV(item->frame_rate, frame_rate) &&
181 color_model == item->data->get_color_model() &&
182 w == item->data->get_w() &&
183 h == item->data->get_h())
189 item = (FrameCacheItem*)item->next;
195 void FrameCache::dump()
197 // lock->lock("FrameCache::dump");
198 // printf("FrameCache::dump 1 %d\n", items.total);
199 // for(int i = 0; i < items.total; i++)
201 // FrameCacheItem *item = (FrameCacheItem*)items.values[i];
202 // printf(" position=%lld frame_rate=%f age=%d size=%d\n",
206 // item->data->get_data_size());