Tomato: fixed issue when track used for rotation stabilization points to a freed memory after re-tracking this track.

This commit is contained in:
Sergey Sharybin
2012-02-16 13:15:01 +00:00
parent 7274bea74d
commit aa747f5889

View File

@@ -726,6 +726,7 @@ static void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
{ {
MovieTrackingTrack *track; MovieTrackingTrack *track;
MovieTrackingTrack *act_track= BKE_tracking_active_track(tracking); MovieTrackingTrack *act_track= BKE_tracking_active_track(tracking);
MovieTrackingTrack *rot_track= tracking->stabilization.rot_track;
ListBase tracks= {NULL, NULL}, new_tracks= {NULL, NULL}; ListBase tracks= {NULL, NULL}, new_tracks= {NULL, NULL};
ListBase *old_tracks; ListBase *old_tracks;
int a; 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 this is needed to keep names in unique state and it's faster to change names
of currently operating tracks (if needed) */ of currently operating tracks (if needed) */
for(a= 0; a<map->num_tracks; a++) { for(a= 0; a<map->num_tracks; a++) {
int replace_sel= 0; int replace_sel= 0, replace_rot= 0;
MovieTrackingTrack *new_track, *old; MovieTrackingTrack *new_track, *old;
track= &map->tracks[a]; 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 */ /* original track was found, re-use flags and remove this track */
if(cur) { if(cur) {
if(act_track) if(cur==act_track)
replace_sel= 1; replace_sel= 1;
if(cur==rot_track)
replace_rot= 1;
track->flag= cur->flag; track->flag= cur->flag;
track->pat_flag= cur->pat_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 */ if(replace_sel) /* update current selection in clip */
tracking->act_track= new_track; 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); BLI_addtail(&tracks, new_track);
} }