Tracking: Pass all markers to autotrack at once

This solves delay before tracking actually starts.

The issue is reported by Sebastian over IRC, thanks!
This commit is contained in:
Sergey Sharybin 2017-12-15 12:51:53 +01:00
parent 4895bd6ace
commit 6b62f1dcb9
1 changed files with 38 additions and 11 deletions

View File

@ -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,