Tomato: fixed issue when track used for rotation stabilization points to a freed...
authorSergey Sharybin <sergey.vfx@gmail.com>
Thu, 16 Feb 2012 13:15:01 +0000 (13:15 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Thu, 16 Feb 2012 13:15:01 +0000 (13:15 +0000)
source/blender/blenkernel/intern/tracking.c

index f089aae578bef972d2c59a139571866b384c4b32..c9e6ecf639423ff0ffe820ac7c0607b052ee58ec 100644 (file)
@@ -726,6 +726,7 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
 {
        MovieTrackingTrack *track;
        MovieTrackingTrack *act_track= BKE_tracking_active_track(tracking);
+       MovieTrackingTrack *rot_track= tracking->stabilization.rot_track;
        ListBase tracks= {NULL, NULL}, new_tracks= {NULL, NULL};
        ListBase *old_tracks;
        int a;
@@ -747,7 +748,7 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
           this is needed to keep names in unique state and it's faster to change names
           of currently operating tracks (if needed) */
        for(a= 0; a<map->num_tracks; a++) {
-               int replace_sel= 0;
+               int replace_sel= 0, replace_rot= 0;
                MovieTrackingTrack *new_track, *old;
 
                track= &map->tracks[a];
@@ -766,8 +767,10 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
 
                        /* original track was found, re-use flags and remove this track */
                        if(cur) {
-                               if(act_track)
+                               if(cur==act_track)
                                        replace_sel= 1;
+                               if(cur==rot_track)
+                                       replace_rot= 1;
 
                                track->flag= cur->flag;
                                track->pat_flag= cur->pat_flag;
@@ -786,6 +789,9 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
                if(replace_sel)         /* update current selection in clip */
                        tracking->act_track= new_track;
 
+               if(replace_rot)         /* update track used for rotation stabilization */
+                       tracking->stabilization.rot_track= new_track;
+
                BLI_addtail(&tracks, new_track);
        }