[Bf-blender-cvs] [6b62f1dcb93] master: Tracking: Pass all markers to autotrack at once
Sergey Sharybin
noreply at git.blender.org
Fri Dec 15 12:52:58 CET 2017
Commit: 6b62f1dcb93d1a4a4ec2b7ed29afc6c0be6d3c21
Author: Sergey Sharybin
Date: Fri Dec 15 12:51:53 2017 +0100
Branches: master
https://developer.blender.org/rB6b62f1dcb93d1a4a4ec2b7ed29afc6c0be6d3c21
Tracking: Pass all markers to autotrack at once
This solves delay before tracking actually starts.
The issue is reported by Sebastian over IRC, thanks!
===================================================================
M source/blender/blenkernel/intern/tracking_auto.c
===================================================================
diff --git a/source/blender/blenkernel/intern/tracking_auto.c b/source/blender/blenkernel/intern/tracking_auto.c
index 28e2882a37f..ccff86e4258 100644
--- a/source/blender/blenkernel/intern/tracking_auto.c
+++ b/source/blender/blenkernel/intern/tracking_auto.c
@@ -288,7 +288,29 @@ static void fill_autotrack_tracks(const int frame_width,
const bool backwards,
struct libmv_AutoTrack *autotrack)
{
- int track_index = 0;
+ /* Count number of markers to be put to a context. */
+ size_t num_trackable_marekrs = 0;
+ for (MovieTrackingTrack *track = tracksbase->first;
+ track != NULL;
+ track = track->next)
+ {
+ for (int i = 0; i < track->markersnr; ++i) {
+ const MovieTrackingMarker *marker = track->markers + i;
+ if ((marker->flag & MARKER_DISABLED) == 0) {
+ num_trackable_marekrs++;
+ }
+ }
+ }
+ /* Early output if we don't have any markers. */
+ if (num_trackable_marekrs == 0) {
+ return;
+ }
+ /* Allocate memory for all the markers. */
+ libmv_Marker *libmv_markers = MEM_mallocN(
+ sizeof(libmv_Marker) * num_trackable_marekrs,
+ "libmv markers array");
+ /* Fill in markers array. */
+ int track_index = 0, num_filled_libmv_markers = 0;
for (MovieTrackingTrack *track = tracksbase->first;
track != NULL;
track = track->next)
@@ -298,19 +320,24 @@ static void fill_autotrack_tracks(const int frame_width,
if ((marker->flag & MARKER_DISABLED) != 0) {
continue;
}
- libmv_Marker libmv_marker;
- dna_marker_to_libmv_marker(track,
- marker,
- 0,
- track_index,
- frame_width,
- frame_height,
- backwards,
- &libmv_marker);
- libmv_autoTrackAddMarker(autotrack, &libmv_marker);
+ dna_marker_to_libmv_marker(
+ track,
+ marker,
+ 0,
+ track_index,
+ frame_width, frame_height,
+ backwards,
+ &libmv_markers[num_filled_libmv_markers++]);
}
+ /* Put all markers to autotrack at once. */
track_index++;
}
+ /* Add all markers to autotrack. */
+ libmv_autoTrackSetMarkers(autotrack,
+ libmv_markers,
+ num_trackable_marekrs);
+ /* Free temporary memory. */
+ MEM_freeN(libmv_markers);
}
static void create_per_track_tracking_options(const MovieClip *clip,
More information about the Bf-blender-cvs
mailing list