diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-08-14 12:28:58 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-08-14 12:43:19 +0300 |
commit | ba84eb0f19224987a3158ea333cac76554f2a904 (patch) | |
tree | 4bc6b5a42571730560b0c9af5adb7570a2f44cb6 /source/blender/blenkernel/intern/tracking_util.c | |
parent | d36579bb96b1db3b35ac92c2e4d96cef29c08b73 (diff) |
Tracking: Make frame accessor cache safe for threading
Diffstat (limited to 'source/blender/blenkernel/intern/tracking_util.c')
-rw-r--r-- | source/blender/blenkernel/intern/tracking_util.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/tracking_util.c b/source/blender/blenkernel/intern/tracking_util.c index 2d61e9e4019..bf2dabfab8b 100644 --- a/source/blender/blenkernel/intern/tracking_util.c +++ b/source/blender/blenkernel/intern/tracking_util.c @@ -707,12 +707,11 @@ static ImBuf *accessor_get_ibuf(TrackingImageAccessor *accessor, { ImBuf *ibuf, *orig_ibuf, *final_ibuf; int64_t transform_key = 0; - if (transform != NULL) { transform_key = libmv_frameAccessorgetTransformKey(transform); } - /* First try to get fully processed image from the cache. */ + BLI_spin_lock(&accessor->cache_lock); ibuf = accesscache_get(accessor, clip_index, frame, @@ -720,6 +719,7 @@ static ImBuf *accessor_get_ibuf(TrackingImageAccessor *accessor, downscale, region, transform_key); + BLI_spin_unlock(&accessor->cache_lock); if (ibuf != NULL) { CACHE_PRINTF("Used buffer from cache for frame %d\n", frame); return ibuf; @@ -846,6 +846,7 @@ static ImBuf *accessor_get_ibuf(TrackingImageAccessor *accessor, * cache and for how long. */ if (false) { + BLI_spin_lock(&accessor->cache_lock); accesscache_put(accessor, clip_index, frame, @@ -854,6 +855,7 @@ static ImBuf *accessor_get_ibuf(TrackingImageAccessor *accessor, region, transform_key, final_ibuf); + BLI_spin_unlock(&accessor->cache_lock); } return final_ibuf; @@ -990,6 +992,8 @@ TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR accessor_get_mask_for_track_callback, accessor_release_mask_callback); + BLI_spin_init(&accessor->cache_lock); + return accessor; } |