TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP], int num_clips, int start_frame) { TrackingImageAccessor *accessor = MEM_callocN(sizeof(TrackingImageAccessor), "tracking image accessor"); BLI_assert(num_clips <= MAX_ACCESSOR_CLIP); accessor->cache = IMB_moviecache_create("frame access cache", sizeof(AccessCacheKey), accesscache_hashhash, accesscache_hashcmp); memcpy(accessor->clips, clips, num_clips * sizeof(MovieClip *)); accessor->num_clips = num_clips; accessor->start_frame = start_frame; accessor->libmv_accessor = libmv_FrameAccessorNew((libmv_FrameAccessorUserData *) accessor, accessor_get_image_callback, accessor_release_image_callback); return accessor; }
void BKE_sequencer_cache_cleanup(void) { if (moviecache) { IMB_moviecache_free(moviecache); moviecache = IMB_moviecache_create("seqcache", sizeof(SeqCacheKey), seqcache_hashhash, seqcache_hashcmp); } BKE_sequencer_preprocessed_cache_cleanup(); }
void BKE_sequencer_cache_put(const SeqRenderData *context, Sequence *seq, float cfra, seq_stripelem_ibuf_t type, ImBuf *i) { SeqCacheKey key; if (i == NULL || context->skip_cache) { return; } if (!moviecache) { moviecache = IMB_moviecache_create("seqcache", sizeof(SeqCacheKey), seqcache_hashhash, seqcache_hashcmp); } key.seq = seq; key.context = *context; key.cfra = cfra - seq->start; key.type = type; IMB_moviecache_put(moviecache, &key, i); }
static bool put_imbuf_cache(MovieClip *clip, MovieClipUser *user, ImBuf *ibuf, int flag, bool destructive) { MovieClipImBufCacheKey key; if (!clip->cache) { struct MovieCache *moviecache; // char cache_name[64]; // BLI_snprintf(cache_name, sizeof(cache_name), "movie %s", clip->id.name); clip->cache = MEM_callocN(sizeof(MovieClipCache), "movieClipCache"); moviecache = IMB_moviecache_create("movieclip", sizeof(MovieClipImBufCacheKey), moviecache_hashhash, moviecache_hashcmp); IMB_moviecache_set_getdata_callback(moviecache, moviecache_keydata); IMB_moviecache_set_priority_callback(moviecache, moviecache_getprioritydata, moviecache_getitempriority, moviecache_prioritydeleter); clip->cache->moviecache = moviecache; clip->cache->sequence_offset = -1; } key.framenr = user_frame_to_cache_frame(clip, user->framenr); if (flag & MCLIP_USE_PROXY) { key.proxy = rendersize_to_proxy(user, flag); key.render_flag = user->render_flag; } else { key.proxy = IMB_PROXY_NONE; key.render_flag = 0; } if (destructive) { IMB_moviecache_put(clip->cache->moviecache, &key, ibuf); return true; } else { return IMB_moviecache_put_if_possible(clip->cache->moviecache, &key, ibuf); } }
static void put_imbuf_cache(MovieClip *clip, MovieClipUser *user, ImBuf *ibuf, int flag) { MovieClipImBufCacheKey key; if (!clip->cache) { clip->cache = MEM_callocN(sizeof(MovieClipCache), "movieClipCache"); clip->cache->moviecache = IMB_moviecache_create(sizeof(MovieClipImBufCacheKey), moviecache_hashhash, moviecache_hashcmp, moviecache_keydata); } key.framenr = user->framenr; if (flag & MCLIP_USE_PROXY) { key.proxy = rendersize_to_proxy(user, flag); key.render_flag = user->render_flag; } else { key.proxy = IMB_PROXY_NONE; key.render_flag = 0; } IMB_moviecache_put(clip->cache->moviecache, &key, ibuf); }