Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-09-06 14:21:56 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-09-06 14:21:56 +0400
commit1718c002d625cda44ad79606624926ee82151290 (patch)
tree75c16305861002a71f45b3dae7eb860a346c7004 /source/blender/blenkernel/intern/tracking.c
parent567e3b47cc585afbfd9d56e194562f20a2efdadd (diff)
Avoid tracks reallocation and planes traversal in tracks_map_merge
Would save us a bit of time when doing 2D tracking.
Diffstat (limited to 'source/blender/blenkernel/intern/tracking.c')
-rw-r--r--source/blender/blenkernel/intern/tracking.c65
1 files changed, 21 insertions, 44 deletions
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 19c1bf9b8a8..44303ce2a44 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -1303,25 +1303,6 @@ void BKE_tracking_marker_get_subframe_position(MovieTrackingTrack *track, float
/*********************** 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 @@ static void tracks_map_insert(TracksMap *map, MovieTrackingTrack *track, void *c
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 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
* 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;
- }
-
- /* Update track used for rotation stabilization. */
- if (old_track == rot_track) {
- tracking->stabilization.rot_track = new_track;
- }
+ BLI_remlink(old_tracks, old_track);
+ BLI_addtail(&tracks, old_track);
- 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 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;
- plane_tracks_replace_point_track(plane_tracks, old_track, new_track);
+ /* 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);
- 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);
+
+ /* 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);
+ BLI_addtail(&tracks, new_track);
+ }
}
/* move all tracks, which aren't operating */