[Bf-blender-cvs] [ba84eb0f192] master: Tracking: Make frame accessor cache safe for threading

Sergey Sharybin noreply at git.blender.org
Mon Aug 14 11:43:46 CEST 2017


Commit: ba84eb0f19224987a3158ea333cac76554f2a904
Author: Sergey Sharybin
Date:   Mon Aug 14 11:28:58 2017 +0200
Branches: master
https://developer.blender.org/rBba84eb0f19224987a3158ea333cac76554f2a904

Tracking: Make frame accessor cache safe for threading

===================================================================

M	source/blender/blenkernel/intern/tracking_util.c
M	source/blender/blenkernel/tracking_private.h

===================================================================

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;
 }
 
diff --git a/source/blender/blenkernel/tracking_private.h b/source/blender/blenkernel/tracking_private.h
index 1a68a1cac6a..07236fb2096 100644
--- a/source/blender/blenkernel/tracking_private.h
+++ b/source/blender/blenkernel/tracking_private.h
@@ -125,6 +125,7 @@ typedef struct TrackingImageAccessor {
 	int num_tracks;
 	int start_frame;
 	struct libmv_FrameAccessor *libmv_accessor;
+	SpinLock cache_lock;
 } TrackingImageAccessor;
 
 TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP],




More information about the Bf-blender-cvs mailing list