diff options
-rw-r--r-- | source/blender/blenkernel/BKE_tracking.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/tracking.c | 47 |
2 files changed, 31 insertions, 18 deletions
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index 39cb82b25c3..f92cd784ee0 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -76,6 +76,8 @@ void BKE_tracking_clipboard_paste_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object); /* **** Track **** */ +struct MovieTrackingTrack *BKE_tracking_track_add_empty(struct MovieTracking *tracking, + struct ListBase *tracks_list); struct MovieTrackingTrack *BKE_tracking_track_add(struct MovieTracking *tracking, struct ListBase *tracksbase, float x, diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index 7f927a8838e..3b6479318dd 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -541,6 +541,34 @@ void BKE_tracking_clipboard_paste_tracks(MovieTracking *tracking, MovieTrackingO /*********************** Tracks *************************/ +/* Add new empty track to the given list of tracks. + * + * It is required that caller will append at least one marker to avoid degenerate tracks. + */ +MovieTrackingTrack *BKE_tracking_track_add_empty(MovieTracking *tracking, ListBase *tracks_list) +{ + const MovieTrackingSettings *settings = &tracking->settings; + + MovieTrackingTrack *track = MEM_callocN(sizeof(MovieTrackingTrack), "add_marker_exec track"); + strcpy(track->name, "Track"); + + /* Fill track's settings from default settings. */ + track->motion_model = settings->default_motion_model; + track->minimum_correlation = settings->default_minimum_correlation; + track->margin = settings->default_margin; + track->pattern_match = settings->default_pattern_match; + track->frames_limit = settings->default_frames_limit; + track->flag = settings->default_flag; + track->algorithm_flag = settings->default_algorithm_flag; + track->weight = settings->default_weight; + track->weight_stab = settings->default_weight; + + BLI_addtail(tracks_list, track); + BKE_tracking_track_unique_name(tracks_list, track); + + return track; +} + /* Add new track to a specified tracks base. * * Coordinates are expected to be in normalized 0..1 space, @@ -557,7 +585,7 @@ MovieTrackingTrack *BKE_tracking_track_add(MovieTracking *tracking, int width, int height) { - MovieTrackingTrack *track; + MovieTrackingTrack *track = BKE_tracking_track_add_empty(tracking, tracksbase); MovieTrackingMarker marker; MovieTrackingSettings *settings = &tracking->settings; @@ -571,20 +599,6 @@ MovieTrackingTrack *BKE_tracking_track_add(MovieTracking *tracking, search[0] = half_search / (float)width; search[1] = half_search / (float)height; - track = MEM_callocN(sizeof(MovieTrackingTrack), "add_marker_exec track"); - strcpy(track->name, "Track"); - - /* fill track's settings from default settings */ - track->motion_model = settings->default_motion_model; - track->minimum_correlation = settings->default_minimum_correlation; - track->margin = settings->default_margin; - track->pattern_match = settings->default_pattern_match; - track->frames_limit = settings->default_frames_limit; - track->flag = settings->default_flag; - track->algorithm_flag = settings->default_algorithm_flag; - track->weight = settings->default_weight; - track->weight_stab = settings->default_weight; - memset(&marker, 0, sizeof(marker)); marker.pos[0] = x; marker.pos[1] = y; @@ -604,9 +618,6 @@ MovieTrackingTrack *BKE_tracking_track_add(MovieTracking *tracking, BKE_tracking_marker_insert(track, &marker); - BLI_addtail(tracksbase, track); - BKE_tracking_track_unique_name(tracksbase, track); - return track; } |