[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