[Bf-blender-cvs] [260f75a] master: Tracking: Cleanup, move some plane tracks code to utility functions

Sergey Sharybin noreply at git.blender.org
Tue Apr 21 23:10:55 CEST 2015


Commit: 260f75a2cad9f4af24682af063e3c2a7b38e2e39
Author: Sergey Sharybin
Date:   Wed Apr 22 01:54:45 2015 +0500
Branches: master
https://developer.blender.org/rB260f75a2cad9f4af24682af063e3c2a7b38e2e39

Tracking: Cleanup, move some plane tracks code to utility functions

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

M	source/blender/blenkernel/BKE_tracking.h
M	source/blender/blenkernel/intern/tracking.c
M	source/blender/editors/space_clip/clip_utils.c

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

diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index ef99744..5af05f4 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -136,6 +136,14 @@ struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_active(struct Movie
 
 void BKE_tracking_plane_tracks_deselect_all(struct ListBase *plane_tracks_base);
 
+bool BKE_tracking_plane_track_has_point_track(struct MovieTrackingPlaneTrack *plane_track,
+                                              struct MovieTrackingTrack *track);
+bool BKE_tracking_plane_track_remove_point_track(struct MovieTrackingPlaneTrack *plane_track,
+                                                 struct MovieTrackingTrack *track);
+
+void BKE_tracking_plane_tracks_remove_point_track(struct MovieTracking *tracking,
+                                                  struct MovieTrackingTrack *track);
+
 /* **** Plane Marker **** */
 struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_insert(struct MovieTrackingPlaneTrack *plane_track,
                                                                   struct MovieTrackingPlaneMarker *plane_marker);
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 83db063..e7dccc0 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -1302,6 +1302,64 @@ void BKE_tracking_plane_tracks_deselect_all(ListBase *plane_tracks_base)
 	}
 }
 
+bool BKE_tracking_plane_track_has_point_track(MovieTrackingPlaneTrack *plane_track,
+                                              MovieTrackingTrack *track)
+{
+	int i;
+	for (i = 0; i < plane_track->point_tracksnr; i++) {
+		if (plane_track->point_tracks[i] == track) {
+			return true;
+		}
+	}
+	return false;
+}
+
+bool BKE_tracking_plane_track_remove_point_track(MovieTrackingPlaneTrack *plane_track,
+                                                 MovieTrackingTrack *track)
+{
+	int i, track_index;
+	MovieTrackingTrack **new_point_tracks;
+
+	if (plane_track->point_tracksnr <= 4) {
+		return false;
+	}
+
+	new_point_tracks = MEM_mallocN(sizeof(*new_point_tracks) * (plane_track->point_tracksnr - 1),
+	                               "new point tracks array");
+
+	for (i = 0, track_index = 0; i < plane_track->point_tracksnr; i++) {
+		if (plane_track->point_tracks[i] != track) {
+			new_point_tracks[track_index++] = plane_track->point_tracks[i];
+		}
+	}
+
+	MEM_freeN(plane_track->point_tracks);
+	plane_track->point_tracks = new_point_tracks;
+	plane_track->point_tracksnr--;
+
+	return true;
+}
+
+void BKE_tracking_plane_tracks_remove_point_track(MovieTracking *tracking,
+                                                  MovieTrackingTrack *track)
+{
+	MovieTrackingPlaneTrack *plane_track, *next_plane_track;
+	ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
+	for (plane_track = plane_tracks_base->first;
+	     plane_track;
+	     plane_track = next_plane_track)
+	{
+		next_plane_track = plane_track->next;
+		if (BKE_tracking_plane_track_has_point_track(plane_track, track)) {
+			if (!BKE_tracking_plane_track_remove_point_track(plane_track, track)) {
+				/* Delete planes with less than 3 point tracks in it. */
+				BKE_tracking_plane_track_free(plane_track);
+				BLI_freelinkN(plane_tracks_base, plane_track);
+			}
+		}
+	}
+}
+
 /*********************** Plane Marker *************************/
 
 MovieTrackingPlaneMarker *BKE_tracking_plane_marker_insert(MovieTrackingPlaneTrack *plane_track,
diff --git a/source/blender/editors/space_clip/clip_utils.c b/source/blender/editors/space_clip/clip_utils.c
index 6a2a016..48f8f58 100644
--- a/source/blender/editors/space_clip/clip_utils.c
+++ b/source/blender/editors/space_clip/clip_utils.c
@@ -177,9 +177,7 @@ void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
 	MovieTracking *tracking = &clip->tracking;
 	MovieTrackingStabilization *stab = &tracking->stabilization;
 	MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
-	MovieTrackingPlaneTrack *plane_track, *next_plane_track;
 	ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
-	ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
 	bool has_bundle = false, update_stab = false;
 	char track_name_escaped[MAX_NAME], prefix[MAX_NAME * 2];
 
@@ -197,49 +195,7 @@ void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
 		has_bundle = true;
 
 	/* Make sure no plane will use freed track */
-	for (plane_track = plane_tracks_base->first;
-	     plane_track;
-	     plane_track = next_plane_track)
-	{
-		bool found = false;
-		int i;
-
-		next_plane_track = plane_track->next;
-
-		for (i = 0; i < plane_track->point_tracksnr; i++) {
-			if (plane_track->point_tracks[i] == track) {
-				found = true;
-				break;
-			}
-		}
-
-		if (!found) {
-			continue;
-		}
-
-		if (plane_track->point_tracksnr > 4) {
-			int track_index;
-			MovieTrackingTrack **new_point_tracks;
-
-			new_point_tracks = MEM_mallocN(sizeof(*new_point_tracks) * (plane_track->point_tracksnr - 1),
-			                               "new point tracks array");
-
-			for (i = 0, track_index = 0; i < plane_track->point_tracksnr; i++) {
-				if (plane_track->point_tracks[i] != track) {
-					new_point_tracks[track_index++] = plane_track->point_tracks[i];
-				}
-			}
-
-			MEM_freeN(plane_track->point_tracks);
-			plane_track->point_tracks = new_point_tracks;
-			plane_track->point_tracksnr--;
-		}
-		else {
-			/* Delete planes with less than 3 point tracks in it. */
-			BKE_tracking_plane_track_free(plane_track);
-			BLI_freelinkN(plane_tracks_base, plane_track);
-		}
-	}
+	BKE_tracking_plane_tracks_remove_point_track(tracking, track);
 
 	/* Delete f-curves associated with the track (such as weight, i.e.) */
 	BLI_strescape(track_name_escaped, track->name, sizeof(track_name_escaped));




More information about the Bf-blender-cvs mailing list