[Bf-blender-cvs] [6a8f4bfc608] master: Tracking: Fix missing average of track offset

Sergey Sharybin noreply at git.blender.org
Wed Jan 20 14:09:45 CET 2021


Commit: 6a8f4bfc60800f63ab2571fc534ffff253e953bd
Author: Sergey Sharybin
Date:   Wed Jan 20 13:59:35 2021 +0100
Branches: master
https://developer.blender.org/rB6a8f4bfc60800f63ab2571fc534ffff253e953bd

Tracking: Fix missing average of track offset

===================================================================

M	source/blender/blenkernel/intern/tracking.c

===================================================================

diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 5353d0b9628..d124922acd1 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -1033,9 +1033,11 @@ static void multiply_marker(MovieTrackingMarker *marker, const float multiplier)
   mul_v2_fl(marker->search_max, multiplier);
 }
 
-void BKE_tracking_tracks_average(MovieTrackingTrack *dst_track,
-                                 /*const*/ MovieTrackingTrack **src_tracks,
-                                 const int num_src_tracks)
+/* Helper function for BKE_tracking_tracks_average which takes care of averaging fields of
+ * markers (position, patterns, ...). */
+static void tracking_average_markers(MovieTrackingTrack *dst_track,
+                                     /*const*/ MovieTrackingTrack **src_tracks,
+                                     const int num_src_tracks)
 {
   /* Get global range of frames within which averaging would happen. */
   int first_frame, last_frame;
@@ -1088,6 +1090,32 @@ void BKE_tracking_tracks_average(MovieTrackingTrack *dst_track,
   MEM_freeN(counters);
 }
 
+/* Helper function for BKE_tracking_tracks_average which takes care of averaging fields of
+ * tracks (track for example, offset). */
+static void tracking_average_tracks(MovieTrackingTrack *dst_track,
+                                    /*const*/ MovieTrackingTrack **src_tracks,
+                                    const int num_src_tracks)
+{
+  /* TODO(sergey): Consider averaging weight, stabilization weight, maybe even bundle position. */
+  zero_v2(dst_track->offset);
+  for (int track_index = 0; track_index < num_src_tracks; track_index++) {
+    add_v2_v2(dst_track->offset, src_tracks[track_index]->offset);
+  }
+  mul_v2_fl(dst_track->offset, 1.0f / num_src_tracks);
+}
+
+void BKE_tracking_tracks_average(MovieTrackingTrack *dst_track,
+                                 /*const*/ MovieTrackingTrack **src_tracks,
+                                 const int num_src_tracks)
+{
+  if (num_src_tracks == 0) {
+    return;
+  }
+
+  tracking_average_markers(dst_track, src_tracks, num_src_tracks);
+  tracking_average_tracks(dst_track, src_tracks, num_src_tracks);
+}
+
 MovieTrackingTrack *BKE_tracking_track_get_named(MovieTracking *tracking,
                                                  MovieTrackingObject *object,
                                                  const char *name)



More information about the Bf-blender-cvs mailing list