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:
-rw-r--r--source/blender/blenkernel/BKE_tracking.h2
-rw-r--r--source/blender/blenkernel/intern/tracking.c47
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;
}