[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59872] trunk/blender/source/blender/ blenkernel/intern/tracking.c: Avoid tracks reallocation and planes traversal in tracks_map_merge

Sergey Sharybin sergey.vfx at gmail.com
Fri Sep 6 12:21:56 CEST 2013


Revision: 59872
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59872
Author:   nazgul
Date:     2013-09-06 10:21:56 +0000 (Fri, 06 Sep 2013)
Log Message:
-----------
Avoid tracks reallocation and planes traversal in tracks_map_merge

Would save us a bit of time when doing 2D tracking.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/tracking.c

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2013-09-06 09:56:04 UTC (rev 59871)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2013-09-06 10:21:56 UTC (rev 59872)
@@ -1303,25 +1303,6 @@
 
 /*********************** Plane Track *************************/
 
-static void plane_tracks_replace_point_track(ListBase *plane_tracks,
-                                             MovieTrackingTrack *old_track,
-                                             MovieTrackingTrack *new_track)
-{
-	MovieTrackingPlaneTrack *plane_track;
-
-	for (plane_track = plane_tracks->first;
-	    plane_track;
-	    plane_track = plane_track->next)
-	{
-		int i;
-		for (i = 0; i < plane_track->point_tracksnr; i++) {
-			if (plane_track->point_tracks[i] == old_track) {
-				plane_track->point_tracks[i] = new_track;
-			}
-		}
-	}
-}
-
 /* Creates new plane track out of selected point tracks */
 MovieTrackingPlaneTrack *BKE_tracking_plane_track_add(MovieTracking *tracking, ListBase *plane_tracks_base,
                                                       ListBase *tracks, int framenr)
@@ -2386,12 +2367,9 @@
 	map->ptr++;
 }
 
-/* TODO(sergey): Make it so tracks are not re-allocating here */
 static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
 {
 	MovieTrackingTrack *track;
-	MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
-	MovieTrackingTrack *rot_track = tracking->stabilization.rot_track;
 	ListBase tracks = {NULL, NULL}, new_tracks = {NULL, NULL};
 	ListBase *old_tracks, *plane_tracks;
 	int a;
@@ -2417,42 +2395,41 @@
 	 * of currently operating tracks (if needed)
 	 */
 	for (a = 0; a < map->num_tracks; a++) {
-		MovieTrackingTrack *new_track, *old_track;
+		MovieTrackingTrack *old_track;
+		bool mapped_to_old = false;
 
 		track = &map->tracks[a];
 
-		new_track = tracking_track_duplicate(track);
-
 		/* find original of operating track in list of previously displayed tracks */
 		old_track = BLI_ghash_lookup(map->hash, track);
 		if (old_track) {
 			if (BLI_findindex(old_tracks, old_track) != -1) {
-				/* Update active track in movie clip. */
-				if (old_track == act_track) {
-					tracking->act_track = new_track;
-				}
+				BLI_remlink(old_tracks, old_track);
+				BLI_addtail(&tracks, old_track);
 
-				/* Update track used for rotation stabilization. */
-				if (old_track == rot_track) {
-					tracking->stabilization.rot_track = new_track;
-				}
+				/* Copy flags like selection back to the track map */
+				track->flag = old_track->flag;
+				track->pat_flag = old_track->pat_flag;
+				track->search_flag = old_track->search_flag;
 
-				new_track->flag = track->flag = old_track->flag;
-				new_track->pat_flag = track->pat_flag = old_track->pat_flag;
-				new_track->search_flag = track->search_flag = old_track->search_flag;
+				/* Copy all the rest settings back from the map to the actual tracks,  */
+				MEM_freeN(old_track->markers);
+				*old_track = *track;
+				old_track->markers = MEM_dupallocN(old_track->markers);
 
-				plane_tracks_replace_point_track(plane_tracks, old_track, new_track);
-
-				BKE_tracking_track_free(old_track);
-				BLI_freelinkN(old_tracks, old_track);
+				mapped_to_old = true;
 			}
 		}
 
-		/* Update old-new track mapping */
-		BLI_ghash_remove(map->hash, track, NULL, NULL);
-		BLI_ghash_insert(map->hash, track, new_track);
+		if (mapped_to_old == false) {
+			MovieTrackingTrack *new_track = tracking_track_duplicate(track);
 
-		BLI_addtail(&tracks, new_track);
+			/* Update old-new track mapping */
+			BLI_ghash_remove(map->hash, track, NULL, NULL);
+			BLI_ghash_insert(map->hash, track, new_track);
+
+			BLI_addtail(&tracks, new_track);
+		}
 	}
 
 	/* move all tracks, which aren't operating */




More information about the Bf-blender-cvs mailing list