Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/seqcache.c
| Show First 20 Lines • Show All 1,395 Lines • ▼ Show 20 Lines | if (seq_disk_cache_is_enabled(context->bmain)) { | ||||
| BLI_mutex_lock(&cache->disk_cache->read_write_mutex); | BLI_mutex_lock(&cache->disk_cache->read_write_mutex); | ||||
| seq_disk_cache_write_file(cache->disk_cache, key, i); | seq_disk_cache_write_file(cache->disk_cache, key, i); | ||||
| BLI_mutex_unlock(&cache->disk_cache->read_write_mutex); | BLI_mutex_unlock(&cache->disk_cache->read_write_mutex); | ||||
| seq_disk_cache_enforce_limits(cache->disk_cache); | seq_disk_cache_enforce_limits(cache->disk_cache); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| size_t BKE_sequencer_cache_get_num_items(struct Scene *scene) | |||||
| { | |||||
| SeqCache *cache = seq_cache_get_from_scene(scene); | |||||
| if (!cache) { | |||||
| return 0; | |||||
| } | |||||
| seq_cache_lock(scene); | |||||
| size_t num_items = BLI_ghash_len(cache->hash); | |||||
| seq_cache_unlock(scene); | |||||
| return num_items; | |||||
| } | |||||
| void BKE_sequencer_cache_iterate( | void BKE_sequencer_cache_iterate( | ||||
| struct Scene *scene, | struct Scene *scene, | ||||
| void *userdata, | void *userdata, | ||||
| bool callback(void *userdata, struct Sequence *seq, int nfra, int cache_type, float cost)) | bool callback_init(void *userdata, size_t item_count), | ||||
| bool callback_iter(void *userdata, struct Sequence *seq, int nfra, int cache_type, float cost)) | |||||
| { | { | ||||
| SeqCache *cache = seq_cache_get_from_scene(scene); | SeqCache *cache = seq_cache_get_from_scene(scene); | ||||
| if (!cache) { | if (!cache) { | ||||
| return; | return; | ||||
| } | } | ||||
| seq_cache_lock(scene); | seq_cache_lock(scene); | ||||
| bool interrupt = callback_init(userdata, BLI_ghash_len(cache->hash)); | |||||
| GHashIterator gh_iter; | GHashIterator gh_iter; | ||||
| BLI_ghashIterator_init(&gh_iter, cache->hash); | BLI_ghashIterator_init(&gh_iter, cache->hash); | ||||
| bool interrupt = false; | |||||
| while (!BLI_ghashIterator_done(&gh_iter) && !interrupt) { | while (!BLI_ghashIterator_done(&gh_iter) && !interrupt) { | ||||
| SeqCacheKey *key = BLI_ghashIterator_getKey(&gh_iter); | SeqCacheKey *key = BLI_ghashIterator_getKey(&gh_iter); | ||||
| BLI_ghashIterator_step(&gh_iter); | BLI_ghashIterator_step(&gh_iter); | ||||
| interrupt = callback(userdata, key->seq, key->nfra, key->type, key->cost); | interrupt = callback_iter(userdata, key->seq, key->nfra, key->type, key->cost); | ||||
| } | } | ||||
| cache->last_key = NULL; | cache->last_key = NULL; | ||||
| seq_cache_unlock(scene); | seq_cache_unlock(scene); | ||||
| } | } | ||||
| bool BKE_sequencer_cache_is_full(Scene *scene) | bool BKE_sequencer_cache_is_full(Scene *scene) | ||||
| { | { | ||||
| size_t memory_total = seq_cache_get_mem_total(); | size_t memory_total = seq_cache_get_mem_total(); | ||||
| SeqCache *cache = seq_cache_get_from_scene(scene); | SeqCache *cache = seq_cache_get_from_scene(scene); | ||||
| if (!cache) { | if (!cache) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| return memory_total < cache->memory_used; | return memory_total < cache->memory_used; | ||||
| } | } | ||||