53#include "RNA_prototypes.hh"
147 channel = channel->
next;
201 if (track_src->markers) {
218 const ListBase *plane_tracks_list_src,
225 if (plane_track_src->markers) {
239 BLI_addtail(plane_tracks_list_dst, plane_track_dst);
251 *reconstruction_dst = *reconstruction_src;
252 if (reconstruction_src->
cameras) {
263 *stabilization_dst = *stabilization_src;
273 *tracking_object_dst = *tracking_object_src;
297 const ListBase *tracking_objects_src,
305 BLI_addtail(tracking_objects_dst, tracking_object_dst);
313 *tracking_dst = *tracking_src;
326 tracking_dst->
stats =
nullptr;
395 float viewfac, pixsize,
left, right, bottom,
top, clipsta, clipend;
398 float shiftx, shifty, winside = float(
min_ii(winx, winy));
412 pixsize = clipsta / viewfac;
414 left = -0.5f * float(winx) + shiftx * winside;
415 bottom = -0.5f * (ycor) *
float(winy) + shifty * winside;
416 right = 0.5f * float(winx) + shiftx * winside;
417 top = 0.5f * (ycor) *
float(winy) + shifty * winside;
449 next_track = track->
next;
488 if (track->prev ==
nullptr) {
540 const float pattern_size[2] = {half_pattern_px / width, half_pattern_px / height};
541 const float search_size[2] = {half_search_px / width, half_search_px / height};
572 new_track->
next = new_track->
prev =
nullptr;
592 sizeof(track->
name));
607 const int last_marker_index = track->
markersnr - 1;
613 const int num_tracks,
617 *r_first_frame = INT_MAX;
618 *r_last_frame = INT_MIN;
619 for (
int i = 0;
i < num_tracks; ++
i) {
621 int track_first_frame, track_last_frame;
623 *r_first_frame =
min_ii(*r_first_frame, track_first_frame);
624 *r_last_frame =
max_ii(*r_last_frame, track_last_frame);
630 int num_selected_tracks = 0;
633 ++num_selected_tracks;
636 return num_selected_tracks;
654 if (num_selected_tracks == 0) {
659 num_selected_tracks,
"selected tracks array");
660 int source_track_index = 0;
665 source_tracks[source_track_index] = track;
666 ++source_track_index;
669 *r_num_tracks = num_selected_tracks;
671 return source_tracks;
722 for (
int a = 1; a < track->
markersnr; a++) {
739 for (
int a = track->
markersnr - 1; a >= 0; a--) {
763 marker_new = *marker;
796 int i = 0, a = 0,
b = 0, tot;
804 markers[
i] = src_track->
markers[a++];
810 markers[
i] = src_track->
markers[a++];
832 marker_a = &src_track->
markers[a];
853 for (
int j = 0; j <
len; j++) {
857 fac = 1.0f / (
len - 1) * j;
864 marker_a = &src_track->
markers[a];
916 for (
int corner = 0; corner < 4; ++corner) {
934 for (
int corner = 0; corner < 4; ++corner) {
945 const int num_src_tracks)
948 int first_frame, last_frame;
950 src_tracks, num_src_tracks, &first_frame, &last_frame);
951 if (last_frame < first_frame) {
954 const int num_frames = last_frame - first_frame + 1;
958 num_frames,
"tracks average accumulator");
960 for (
int frame = first_frame; frame <= last_frame; ++frame) {
961 const int frame_index = frame - first_frame;
962 accumulator[frame_index].
framenr = frame;
967 for (
int track_index = 0; track_index < num_src_tracks; ++track_index) {
969 for (
int frame = first_frame; frame <= last_frame; ++frame) {
974 const int frame_index = frame - first_frame;
976 ++counters[frame_index];
981 for (
int frame = first_frame; frame <= last_frame; ++frame) {
983 const int frame_index = frame - first_frame;
984 if (!counters[frame_index]) {
987 const float multiplier = 1.0f / float(counters[frame_index]);
1002 const int num_src_tracks)
1006 for (
int track_index = 0; track_index < num_src_tracks; track_index++) {
1014 const int num_src_tracks)
1016 if (num_src_tracks == 0) {
1025 int selection_index,
1033 if (cur == selection_index) {
1034 *r_tracksbase = &
object->tracks;
1043 *r_tracksbase =
nullptr;
1069 frame = frame->
next;
1077 layer = layer->
next;
1092 size_t index = size_t(
y) *
data->mask_width +
x;
1093 size_t index_end = size_t(
y) *
data->mask_width + x_end;
1095 data->mask[index] = 1.0f;
1096 }
while (++index != index_end);
1100 const int frame_height,
1101 const float region_min[2],
1104 const int mask_width,
1105 const int mask_height)
1111 data.mask_width = mask_width;
1112 data.mask_height = mask_height;
1122 mask_points[
i][0] = stroke_points[
i].
x * frame_width - region_min[0];
1123 mask_points[
i][1] = stroke_points[
i].
y * frame_height - region_min[1];
1129 stroke = stroke->
next;
1131 frame = frame->
next;
1136 const int frame_height,
1137 const float region_min[2],
1138 const float region_max[2],
1141 float *
mask =
nullptr;
1143 if (layer !=
nullptr) {
1144 const int mask_width = region_max[0] - region_min[0];
1145 const int mask_height = region_max[1] - region_min[1];
1148 frame_width, frame_height, region_min, layer,
mask, mask_width, mask_height);
1154 const int frame_height,
1159 const float region_min[2] = {
1163 const float region_max[2] = {
1168 frame_width, frame_height, region_min, region_max, track);
1175 const FCurve *weight_fcurve;
1176 float weight = track->
weight;
1179 &clip->
id, track, &RNA_MovieTrackingTrack,
"weight", 0,
nullptr);
1181 if (weight_fcurve) {
1245 *old_marker = *marker;
1270 memmove(track->
markers + a + 2,
1275 track->
markers[a + 1] = *marker;
1277 return &track->
markers[a + 1];
1284 while (a < track->markersnr) {
1309 float pat_min[2], pat_max[2];
1312 for (
int a = 0; a < 2; a++) {
1314 for (
int b = 0;
b < 4;
b++) {
1319 for (
int b = 0;
b < 4;
b++) {
1328 float pat_min[2], pat_max[2];
1331 for (
int a = 0; a < 2; a++) {
1339 float pat_min[2], pat_max[2];
1345 for (
int a = 0; a < 2; a++) {
1359 const int num_markers = track->
markersnr;
1361 if (num_markers == 0) {
1362 BLI_assert_msg(0,
"Detected degenerated track, should never happen.");
1366 int left_boundary = 0;
1367 int right_boundary = num_markers;
1368 while (left_boundary < right_boundary) {
1369 const int median_index = (left_boundary + right_boundary) / 2;
1372 if (marker->
framenr == framenr) {
1376 if (marker->
framenr < framenr) {
1377 left_boundary = median_index + 1;
1381 right_boundary = median_index - 1;
1385 const int closest_index =
clamp_i(right_boundary, 0, num_markers - 1);
1387 return &track->
markers[closest_index];
1394 if (marker->
framenr != framenr) {
1405 if (marker->
framenr != framenr) {
1408 marker_new = *marker;
1426 while (current_marker >= track->
markers && current_marker <= last_marker) {
1428 return current_marker;
1430 current_marker += direction;
1441 if (closest_marker ==
nullptr) {
1445 *r_marker = *closest_marker;
1450 track, closest_marker, -1);
1451 if (left_marker ==
nullptr) {
1456 track, closest_marker + 1, 1);
1457 if (right_marker ==
nullptr) {
1461 if (left_marker == right_marker) {
1462 *r_marker = *left_marker;
1466 const float factor = float(framenr - left_marker->
framenr) /
1471 for (
int i = 0;
i < 4;
i++) {
1484 if (framenr == left_marker->
framenr) {
1485 r_marker->
flag = left_marker->
flag;
1487 else if (framenr == right_marker->
framenr) {
1488 r_marker->
flag = right_marker->
flag;
1513 if (marker != marker_last) {
1521 float fac = (framenr - int(framenr)) / (marker_next->
framenr - marker->
framenr);
1548 float tracks_min[2], tracks_max[2];
1549 int num_selected_tracks = 0;
1558 float pattern_min[2], pattern_max[2];
1564 num_selected_tracks++;
1568 if (num_selected_tracks < 4) {
1582 "new plane tracks array");
1583 int track_index = 0;
1593 plane_marker.
framenr = framenr;
1594 plane_marker.
flag = 0;
1599 plane_marker.
corners[1][0] = tracks_max[0];
1600 plane_marker.
corners[1][1] = tracks_min[1];
1601 plane_marker.
corners[3][0] = tracks_min[0];
1602 plane_marker.
corners[3][1] = tracks_max[1];
1621 sizeof(plane_track->
name));
1663 new_point_tracks[track_index++] = plane_track->
point_tracks[
i];
1727 if (old_plane_marker) {
1729 *old_plane_marker = *plane_marker;
1731 return old_plane_marker;
1749 memmove(plane_track->
markers + a + 2,
1754 plane_track->
markers[a + 1] = *plane_marker;
1756 return &plane_track->
markers[a + 1];
1763 while (a < plane_track->markersnr) {
1766 memmove(plane_track->
markers + a,
1775 plane_track->
markers =
nullptr;
1800 if (framenr < plane_track->markers[0].framenr) {
1801 return &plane_track->
markers[0];
1809 while (a < plane_track->markersnr && plane_track->
markers[a].
framenr <= framenr) {
1813 return &plane_track->
markers[a];
1819 return &plane_track->
markers[a - 1];
1826 return &plane_track->
markers[a];
1833 return &plane_track->
markers[a];
1841 if (plane_marker->
framenr != framenr) {
1845 return plane_marker;
1853 if (plane_marker->
framenr != framenr) {
1856 plane_marker_new = *plane_marker;
1857 plane_marker_new.
framenr = framenr;
1862 return plane_marker;
1867 float corners[4][2])
1871 if (marker != marker_last) {
1874 float fac = (framenr - int(framenr)) / (marker_next->
framenr - marker->
framenr);
1875 for (
int i = 0;
i < 4;
i++) {
1880 for (
int i = 0;
i < 4;
i++) {
1886 for (
int i = 0;
i < 4;
i++) {
1915 tracking_object->
scale = 1.0f;
1922 return tracking_object;
1962 sizeof(tracking_object->
name));
1968 if (
STREQ(tracking_object->name, name)) {
1969 return tracking_object;
1985 return tracking_object;
1996 if (
STREQ(track->name, name)) {
2008 if (
STREQ(plane_track->name, name)) {
2027 if (!reconstruction->
camnr) {
2031 if (framenr < cameras[0].framenr) {
2039 if (framenr > cameras[reconstruction->
camnr - 1].
framenr) {
2041 return reconstruction->
camnr - 1;
2051 if (cameras[a].framenr >= framenr) {
2055 while (a >= 0 && a < reconstruction->camnr) {
2056 int cfra = cameras[a].
framenr;
2060 if (d > 0 && cfra > framenr) {
2069 if (d < 0 && cfra < framenr) {
2078 if (cfra == framenr) {
2102 MovieTracking *tracking,
int winx,
int winy,
float *shiftx,
float *shifty)
2104 float principal_px[2];
2110 *shiftx = (0.5f * winx - principal_px[0]) / winx;
2111 *shifty = (0.5f * winy - principal_px[1]) / winx;
2123 scene->
r.
xsch = width;
2124 scene->
r.
ysch = height;
2127 scene->
r.
yasp = 1.0f;
2142 return &reconstruction->
cameras[a];
2160 if ((a < reconstruction->camnr - 1) && (cameras[a].framenr != framenr)) {
2161 float t = (framenr - cameras[a].
framenr) / (cameras[a + 1].framenr - cameras[a].framenr);
2172 float r_principal_point_pixel[2])
2176 int frame_width, frame_height;
2181 camera->
principal_point, frame_width, frame_height, r_principal_point_pixel);
2185 const float principal_point_pixel[2])
2189 int frame_width, frame_height;
2194 principal_point_pixel, frame_width, frame_height, camera->
principal_point);
2212 return a->
k1 ==
b->k1 && a->
k2 ==
b->k2 && a->
k3 ==
b->k3;
2262 int calibration_width,
2263 int calibration_height)
2269 tracking, calibration_width, calibration_height, &camera_intrinsics_options);
2287 int calibration_width,
2288 int calibration_height)
2293 tracking, calibration_width, calibration_height, &camera_intrinsics_options);
2311 *new_distortion = *distortion;
2314 return new_distortion;
2320 int calibration_width,
2321 int calibration_height,
2384 float inv_focal = 1.0f / distortion->
focal;
2385 double x = (co[0] - distortion->
principal_px[0]) * inv_focal,
2386 y = (co[1] - distortion->
principal_px[1] * aspy) * inv_focal;
2399 double x = co[0],
y = co[1];
2425 float principal_px[2];
2430 double x = (co[0] - principal_px[0]) / camera->
focal,
2431 y = (co[1] - principal_px[1] * aspy) / camera->
focal;
2452 double x = co[0],
y = co[1];
2456 float principal_px[2];
2460 r_co[0] = float(
x) * camera->
focal + principal_px[0];
2461 r_co[1] = float(
y) * camera->
focal + principal_px[1] * aspy;
2466 int calibration_width,
2467 int calibration_height,
2474 tracking, calibration_width, calibration_height);
2488 int calibration_width,
2489 int calibration_height,
2496 tracking, calibration_width, calibration_height);
2512template<
typename Value,
typename Function,
typename Reduction>
2514 const Value &identity,
2515 const Function &function,
2516 const Reduction &reduction)
2523 [&](
const IndexRange sub_range,
const Value &initial_value) {
2524 Value
result = initial_value;
2525 for (
const int64_t i : sub_range) {
2535 const int calibration_size[2],
2536 const bool undistort,
2544 auto distortion_function = [&](
const float2 &position) {
2553 float2 distorted_coordinates;
2569 std::numeric_limits<float>::lowest(),
2570 [&](
const int i,
float &accumulated_value) {
2571 accumulated_value =
math::max(accumulated_value,
2574 [&](
const float &a,
const float &
b) {
return math::max(a,
b); });
2579 std::numeric_limits<float>::max(),
2580 [&](
const int i,
float &accumulated_value) {
2581 accumulated_value =
math::min(accumulated_value, distortion_function(
float2(0.0f,
i)).
x);
2583 [&](
const float &a,
const float &
b) {
return math::min(a,
b); });
2588 std::numeric_limits<float>::max(),
2589 [&](
const int i,
float &accumulated_value) {
2590 accumulated_value =
math::min(accumulated_value, distortion_function(
float2(
i, 0.0f)).
y);
2592 [&](
const float &a,
const float &
b) {
return math::min(a,
b); });
2597 std::numeric_limits<float>::lowest(),
2598 [&](
const int i,
float &accumulated_value) {
2599 accumulated_value =
math::max(accumulated_value,
2602 [&](
const float &a,
const float &
b) {
return math::max(a,
b); });
2606 const float right_delta = maximum_x -
size[0];
2607 const float left_delta = 0.0f - minimum_x;
2608 const float bottom_delta = 0.0f - minimum_y;
2609 const float top_delta = maximum_y -
size[1];
2624 const bool grayscale)
2634 const int frame_height,
2635 const ImBuf *search_ibuf,
2638 const bool from_anchor,
2639 const bool use_mask,
2640 const int num_samples_x,
2641 const int num_samples_y,
2644 ImBuf *pattern_ibuf;
2645 double src_pixel_x[5], src_pixel_y[5];
2646 double warped_position_x, warped_position_y;
2647 float *
mask =
nullptr;
2649 if (num_samples_x <= 0 || num_samples_y <= 0) {
2659 frame_width, frame_height, marker, src_pixel_x, src_pixel_y);
2669 for (
int a = 0; a < 5; a++) {
2670 src_pixel_x[a] += double((track->
offset[0] * frame_width) -
2671 int(track->
offset[0] * frame_width));
2672 src_pixel_y[a] += double((track->
offset[1] * frame_height) -
2673 int(track->
offset[1] * frame_height));
2676 if (track->
offset[0] < 0.0f) {
2677 src_pixel_x[a] += 1.0;
2679 if (track->
offset[1] < 0.0f) {
2680 src_pixel_y[a] += 1.0;
2701 &warped_position_y);
2715 &warped_position_y);
2719 pos[0] = warped_position_x;
2720 pos[1] = warped_position_y;
2727 return pattern_ibuf;
2733 const bool anchored,
2734 const bool disable_channels)
2736 ImBuf *pattern_ibuf, *search_ibuf;
2737 float pat_min[2], pat_max[2];
2738 int num_samples_x, num_samples_y;
2742 num_samples_x = (pat_max[0] - pat_min[0]) * ibuf->
x;
2743 num_samples_y = (pat_max[1] - pat_min[1]) * ibuf->
y;
2762 pattern_ibuf =
nullptr;
2765 return pattern_ibuf;
2771 const bool anchored,
2772 const bool disable_channels)
2776 float search_origin[2];
2780 x = search_origin[0];
2781 y = search_origin[1];
2791 if (
w <= 0 || h <= 0) {
2799 if (disable_channels) {
2812 const int frame_width,
2813 const int frame_height)
2815 const float a_px[2] = {a[0] * frame_width, a[1] * frame_height};
2816 const float b_px[2] = {
b[0] * frame_width,
b[1] * frame_height};
2825 const float(*corners)[2] = plane_marker->
corners;
2828 const int frame_width = frame_ibuf->
x;
2829 const int frame_height = frame_ibuf->
y;
2833 corners[0], corners[3], frame_width, frame_height);
2835 corners[1], corners[2], frame_width, frame_height);
2839 corners[3], corners[2], frame_width, frame_height);
2841 corners[0], corners[1], frame_width, frame_height);
2844 const int num_samples_x =
max_ii(top_side_len_px, bottom_side_len_px);
2845 const int num_samples_y =
max_ii(left_side_len_px, right_side_len_px);
2854 const double src_pixel_x[4] = {corners[0][0] * frame_width,
2855 corners[1][0] * frame_width,
2856 corners[2][0] * frame_width,
2857 corners[3][0] * frame_width};
2858 const double src_pixel_y[4] = {corners[0][1] * frame_height,
2859 corners[1][1] * frame_height,
2860 corners[2][1] * frame_height,
2861 corners[3][1] * frame_height};
2864 double warped_position_x, warped_position_y;
2879 &warped_position_y);
2893 &warped_position_y);
2903 ImBuf *ibuf,
bool disable_red,
bool disable_green,
bool disable_blue,
bool grayscale)
2905 if (!disable_red && !disable_green && !disable_blue && !grayscale) {
2912 float scale = (disable_red ? 0.0f : 0.2126f) + (disable_green ? 0.0f : 0.7152f) +
2913 (disable_blue ? 0.0f : 0.0722f);
2915 for (
int y = 0;
y < ibuf->
y;
y++) {
2916 for (
int x = 0;
x < ibuf->
x;
x++) {
2917 int pixel = ibuf->
x *
y +
x;
2921 float r = disable_red ? 0.0f : rrgbf[0];
2922 float g = disable_green ? 0.0f : rrgbf[1];
2923 float b = disable_blue ? 0.0f : rrgbf[2];
2926 float gray = (0.2126f * r + 0.7152f * g + 0.0722f *
b) / scale;
2928 rrgbf[0] = rrgbf[1] = rrgbf[2] = gray;
2938 uchar r = disable_red ? 0 : rrgb[0];
2939 uchar g = disable_green ? 0 : rrgb[1];
2940 uchar b = disable_blue ? 0 : rrgb[2];
2943 float gray = (0.2126f * r + 0.7152f * g + 0.0722f *
b) / scale;
2945 rrgb[0] = rrgb[1] = rrgb[2] = gray;
3028 bool inverse,
bool a_markerless,
int a_value,
bool b_markerless,
int b_value)
3030 if (a_markerless && b_markerless) {
3046 if (a_value < b_value) {
3052 if (a_value > b_value) {
3160 bool first_not_disabled_marker_framenr_set;
3175 first_not_disabled_marker_framenr_set =
false;
3186 if (marker->
framenr != prev_fra + 1) {
3193 if (!first_not_disabled_marker_framenr_set) {
3195 first_not_disabled_marker_framenr_set =
true;
3216 "tracking channel segments");
3232 if (marker->
framenr != prev_fra + 1) {
3267 if (!show_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
3276 "tracking dopesheet channel");
3277 channel->
track = track;
3280 SNPRINTF(channel->
name,
"%s (%.4f)", track->name, track->error);
3364 int frames, start_frame = INT_MAX, end_frame = -INT_MAX;
3365 int *per_frame_counter;
3366 int prev_coverage, last_segment_frame;
3370 start_frame =
min_ii(start_frame, track->markers[0].framenr);
3371 end_frame =
max_ii(end_frame, track->markers[track->markersnr - 1].framenr);
3374 if (start_frame > end_frame) {
3379 frames = end_frame - start_frame + 1;
3386 for (
int i = 0;
i < track->markersnr;
i++) {
3391 per_frame_counter[marker->
framenr - start_frame]++;
3398 last_segment_frame = start_frame;
3401 if (!per_frame_counter[0]) {
3405 for (
int i = 1;
i < frames;
i++) {
3409 if (
i == frames - 1 && !per_frame_counter[
i]) {
3413 if (coverage != prev_coverage ||
i == frames - 1) {
3415 int end_segment_frame =
i - 1 + start_frame;
3417 if (end_segment_frame == last_segment_frame) {
3418 end_segment_frame++;
3422 "tracking coverage segment");
3423 coverage_segment->
coverage = prev_coverage;
3424 coverage_segment->
start_frame = last_segment_frame;
3425 coverage_segment->
end_frame = end_segment_frame;
3429 last_segment_frame = end_segment_frame;
3432 prev_coverage = coverage;
3442 dopesheet->
ok =
false;
3452 if (dopesheet->
ok) {
3465 dopesheet->
ok =
true;
3473 return tracking_object;
3483 if (
BLI_findindex(&tracking_object->plane_tracks, plane_track) != -1) {
3484 return tracking_object;
3493 size_t rna_path_maxncpy)
3498 if (tracking_object ==
nullptr) {
3499 BLI_snprintf(rna_path, rna_path_maxncpy,
"tracking.tracks[\"%s\"]", track_name_esc);
3502 char object_name_esc[
MAX_NAME * 2];
3506 "tracking.objects[\"%s\"].tracks[\"%s\"]",
3515 size_t rna_path_maxncpy)
3518 if (tracking_object ==
nullptr) {
3519 BLI_strncpy(rna_path,
"tracking.tracks", rna_path_maxncpy);
3522 char object_name_esc[
MAX_NAME * 2];
3524 BLI_snprintf(rna_path, rna_path_maxncpy,
"tracking.objects[\"%s\"]", object_name_esc);
3531 size_t rna_path_maxncpy)
3537 if (tracking_object ==
nullptr) {
3538 BLI_snprintf(rna_path, rna_path_maxncpy,
"tracking.plane_tracks[\"%s\"]", track_name_esc);
3541 char object_name_esc[
MAX_NAME * 2];
3545 "tracking.objects[\"%s\"].plane_tracks[\"%s\"]",
3554 size_t rna_path_maxncpy)
3558 if (tracking_object ==
nullptr) {
3559 BLI_strncpy(rna_path,
"tracking.plane_tracks", rna_path_maxncpy);
3562 char object_name_esc[
MAX_NAME * 2];
3565 rna_path, rna_path_maxncpy,
"tracking.objects[\"%s\"].plane_tracks", object_name_esc);
float evaluate_fcurve(const FCurve *fcu, float evaltime)
FCurve * id_data_find_fcurve(ID *id, void *data, StructRNA *type, const char *prop_name, int index, bool *r_driven)
@ LIB_ID_CREATE_NO_USER_REFCOUNT
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
float BKE_movieclip_remap_clip_to_scene_frame(const struct MovieClip *clip, float framenr)
General operations, lookup, etc. for blender objects.
void BKE_object_where_is_calc_mat4(const Object *ob, float r_obmat[4][4])
#define TRACK_SELECTED(track)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
void BLI_bitmap_draw_2d_poly_v2i_n(int xmin, int ymin, int xmax, int ymax, blender::Span< blender::int2 > verts, void(*callback)(int x, int x_end, int y, void *), void *user_data)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_listbase_sort(ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE int clamp_i(int value, int min, int max)
void perspective_m4(float mat[4][4], float left, float right, float bottom, float top, float nearClip, float farClip)
static constexpr int image_width
static constexpr int image_height
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void blend_m4_m4m4(float out[4][4], const float dst[4][4], const float src[4][4], float srcweight)
void scale_m4_fl(float R[4][4], float scale)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void unit_m4(float m[4][4])
MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v2_fl(float r[2], float f)
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], float t)
MINLINE void copy_v2_v2(float r[2], const float a[2])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
MINLINE void add_v2_v2(float r[2], const float a[2])
MINLINE void negate_v2_v2(float r[2], const float a[2])
MINLINE bool equals_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void zero_v2(float r[2])
MINLINE bool is_finite_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
#define SNPRINTF(dst, format,...)
int char char int BLI_strcasecmp(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define INIT_MINMAX2(min, max)
#define CTX_DATA_(context, msgid)
#define BLT_I18NCONTEXT_ID_MOVIECLIP
#define DNA_struct_default_get(struct_name)
Object is a sort of wrapper for general info.
@ TRACK_MOTION_MODEL_TRANSLATION
@ TRACKING_COVERAGE_ACCEPTABLE
@ TRACKING_DOPE_SORT_START
@ TRACKING_DOPE_SORT_AVERAGE_ERROR
@ TRACKING_DOPE_SORT_LONGEST
@ TRACKING_DOPE_SORT_NAME
@ TRACKING_DOPE_SORT_TOTAL
@ TRACK_PREVIEW_GRAYSCALE
@ TRACKING_DOPE_SELECTED_ONLY
@ TRACKING_DOPE_SORT_INVERSE
@ TRACKING_DOPE_SHOW_HIDDEN
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
@ TRACKING_SHOW_STAB_TRACKS
@ TRACK_ALGORITHM_FLAG_USE_BRUTE
@ TRACKING_FILTER_BILINEAR
ImBuf * IMB_dupImBuf(const ImBuf *ibuf1)
void IMB_freeImBuf(ImBuf *ibuf)
ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
void IMB_free_byte_pixels(ImBuf *ibuf)
void IMB_rectcpy(ImBuf *dbuf, const ImBuf *sbuf, int destx, int desty, int srcx, int srcy, int width, int height)
Read Guarded memory(de)allocation.
BMesh const char void * data
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
IndexRange index_range() const
VecBase< float, 2 > float2
MatBase< C, R > inverse(MatBase< C, R >) RET
VecBase< float, 4 > float4
#define MEM_reallocN(vmemh, len)
void libmv_cameraIntrinsicsUndistortFloat(const libmv_CameraIntrinsics *libmv_intrinsics, const float *source_image, int width, int height, float overscan, int channels, float *destination_image)
void libmv_cameraIntrinsicsDestroy(libmv_CameraIntrinsics *libmv_intrinsics)
libmv_CameraIntrinsics * libmv_cameraIntrinsicsCopy(const libmv_CameraIntrinsics *libmv_intrinsics)
void libmv_cameraIntrinsicsUndistortByte(const libmv_CameraIntrinsics *libmv_intrinsics, const unsigned char *source_image, int width, int height, float overscan, int channels, unsigned char *destination_image)
void libmv_cameraIntrinsicsDistortByte(const struct libmv_CameraIntrinsics *libmv_intrinsics, const unsigned char *source_image, int width, int height, float overscan, int channels, unsigned char *destination_image)
void libmv_cameraIntrinsicsApply(const struct libmv_CameraIntrinsics *libmv_intrinsics, double x, double y, double *x1, double *y1)
void libmv_cameraIntrinsicsDistortFloat(const libmv_CameraIntrinsics *libmv_intrinsics, float *source_image, int width, int height, float overscan, int channels, float *destination_image)
void libmv_cameraIntrinsicsUpdate(const libmv_CameraIntrinsicsOptions *libmv_camera_intrinsics_options, libmv_CameraIntrinsics *libmv_intrinsics)
void libmv_cameraIntrinsicsInvert(const struct libmv_CameraIntrinsics *libmv_intrinsics, double x, double y, double *x1, double *y1)
libmv_CameraIntrinsics * libmv_cameraIntrinsicsNew(const libmv_CameraIntrinsicsOptions *libmv_camera_intrinsics_options)
struct libmv_CameraIntrinsics libmv_CameraIntrinsics
void libmv_samplePlanarPatchFloat(const float *image, int width, int height, int channels, const double *xs, const double *ys, int num_samples_x, int num_samples_y, const float *mask, float *patch, double *warped_position_x, double *warped_position_y)
void libmv_samplePlanarPatchByte(const unsigned char *image, int width, int height, int channels, const double *xs, const double *ys, int num_samples_x, int num_samples_y, const float *mask, unsigned char *patch, double *warped_position_x, double *warped_position_y)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
T min(const T &a, const T &b)
T max(const T &a, const T &b)
Value parallel_reduce(IndexRange range, int64_t grain_size, const Value &identity, const Function &function, const Reduction &reduction)
uint64_t get_default_hash(const T &v, const Args &...args)
VecBase< int32_t, 2 > int2
const ColorSpace * colorspace
const ColorSpace * colorspace
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct MovieTracking tracking
libmv_CameraIntrinsics * intrinsics
int last_not_disabled_marker_framenr
struct MovieTrackingDopesheetChannel * next
int first_not_disabled_marker_framenr
MovieTrackingTrack * track
ListBase coverage_segments
float pattern_corners[4][2]
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingReconstruction reconstruction
MovieTrackingTrack * active_track
MovieTrackingTrack ** point_tracks
MovieTrackingPlaneMarker * markers
struct MovieReconstructedCamera * cameras
short default_frames_limit
int refine_camera_intrinsics
short default_motion_model
float default_minimum_correlation
short default_algorithm_flag
short default_pattern_size
short default_pattern_match
short default_search_size
float minimum_correlation
MovieTrackingMarker * markers
struct MovieTrackingTrack * next
struct MovieTrackingTrack * prev
MovieTrackingDopesheet dopesheet
MovieTrackingStats * stats
MovieTrackingStabilization stabilization
MovieTrackingCamera camera
MovieTrackingSettings settings
GHash * old_to_new_plane_track_map
GHash * old_to_new_track_map
int BKE_tracking_count_selected_tracks_in_list(const ListBase *tracks_list)
static void tracking_dopesheet_calc_coverage(MovieTracking *tracking)
static void tracking_tracks_free(ListBase *tracks)
void BKE_tracking_distortion_undistort_v2(MovieDistortion *distortion, const float co[2], float r_co[2])
uint64_t BKE_tracking_camera_distortion_hash(const MovieTrackingCamera *camera)
static const MovieTrackingMarker * get_usable_marker_for_interpolation(MovieTrackingTrack *track, const MovieTrackingMarker *anchor_marker, const int direction)
MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get_exact(MovieTrackingPlaneTrack *plane_track, int framenr)
MovieTrackingTrack * BKE_tracking_track_get_for_selection_index(MovieTracking *tracking, int selection_index, ListBase **r_tracksbase)
bool BKE_tracking_camera_distortion_equal(const MovieTrackingCamera *a, const MovieTrackingCamera *b)
float BKE_tracking_track_get_weight_for_marker(MovieClip *clip, MovieTrackingTrack *track, MovieTrackingMarker *marker)
static void tracking_tracks_copy(TrackingCopyContext *ctx, ListBase *tracks_dst, const ListBase *tracks_src, const int flag)
static void reconstructed_camera_scale_set(const MovieTrackingObject *tracking_object, float mat[4][4])
void BKE_tracking_plane_marker_get_subframe_corners(MovieTrackingPlaneTrack *plane_track, float framenr, float corners[4][2])
MovieTrackingPlaneMarker * BKE_tracking_plane_marker_insert(MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker)
void BKE_tracking_track_deselect(MovieTrackingTrack *track, int area)
static void tracking_object_copy(MovieTrackingObject *tracking_object_dst, const MovieTrackingObject *tracking_object_src, const int flag)
void BKE_tracking_camera_get_reconstructed_interpolate(MovieTracking *, MovieTrackingObject *tracking_object, float framenr, float mat[4][4])
ImBuf * BKE_tracking_distort_frame(MovieTracking *tracking, ImBuf *ibuf, int calibration_width, int calibration_height, float overscan)
static void tracking_plane_tracks_free(ListBase *plane_tracks)
MovieTrackingPlaneTrack * BKE_tracking_plane_track_add(MovieTracking *tracking, ListBase *plane_tracks_base, ListBase *tracks, int framenr)
void BKE_tracking_distortion_free(MovieDistortion *distortion)
int BKE_tracking_count_selected_tracks_in_active_object(MovieTracking *tracking)
void BKE_tracking_get_rna_path_for_track(const MovieTracking *tracking, const MovieTrackingTrack *track, char *rna_path, size_t rna_path_maxncpy)
static void tracking_copy_context_delete(TrackingCopyContext *ctx)
void BKE_tracking_object_unique_name(MovieTracking *tracking, MovieTrackingObject *tracking_object)
MovieTrackingMarker * BKE_tracking_marker_insert(MovieTrackingTrack *track, MovieTrackingMarker *marker)
void BKE_tracking_get_camera_object_matrix(const Object *camera_object, float mat[4][4])
void BKE_tracking_track_first_last_frame_get(const MovieTrackingTrack *track, int *r_first_frame, int *r_last_frame)
void BKE_tracking_settings_init(MovieTracking *tracking)
ImBuf * BKE_tracking_get_pattern_imbuf(const ImBuf *ibuf, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const bool anchored, const bool disable_channels)
void BKE_tracking_marker_pattern_minmax(const MovieTrackingMarker *marker, float min[2], float max[2])
MovieTrackingTrack ** BKE_tracking_selected_tracks_in_active_object(MovieTracking *tracking, int *r_num_tracks)
void BKE_tracking_marker_clamp_pattern_position(MovieTrackingMarker *marker)
void BKE_tracking_track_select(ListBase *tracksbase, MovieTrackingTrack *track, int area, bool extend)
void BKE_tracking_camera_to_blender(MovieTracking *tracking, Scene *scene, Camera *camera, int width, int height)
void BKE_tracking_disable_channels(ImBuf *ibuf, bool disable_red, bool disable_green, bool disable_blue, bool grayscale)
static int channels_alpha_inverse_sort(const void *a, const void *b)
float * BKE_tracking_track_get_mask(const int frame_width, const int frame_height, const MovieTrackingTrack *track, const MovieTrackingMarker *marker)
static void tracking_objects_free(ListBase *objects)
static int channels_average_error_sort(const void *a, const void *b)
ImBuf * BKE_tracking_get_plane_imbuf(const ImBuf *frame_ibuf, const MovieTrackingPlaneMarker *plane_marker)
static TrackingCopyContext tracking_copy_context_new()
MovieTrackingTrack * BKE_tracking_track_add_empty(MovieTracking *tracking, ListBase *tracks_list)
void BKE_tracking_track_flag_set(MovieTrackingTrack *track, int area, int flag)
ImBuf * BKE_tracking_sample_pattern(const int frame_width, const int frame_height, const ImBuf *search_ibuf, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const bool from_anchor, const bool use_mask, const int num_samples_x, const int num_samples_y, float pos[2])
static void tracking_objects_copy(ListBase *tracking_objects_dst, const ListBase *tracking_objects_src, const int flag)
static void multiply_marker(MovieTrackingMarker *marker, const float multiplier)
void BKE_tracking_track_path_clear(MovieTrackingTrack *track, const int ref_frame, const eTrackClearAction action)
ImBuf * BKE_tracking_get_search_imbuf(const ImBuf *ibuf, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const bool anchored, const bool disable_channels)
static void tracking_dopesheet_channels_sort(MovieTracking *tracking, int sort_method, bool inverse)
static void path_clear_all(MovieTrackingTrack *track, const int ref_frame)
static int channels_end_inverse_sort(const void *a, const void *b)
static int channels_total_track_sort(const void *a, const void *b)
MovieTrackingTrack * BKE_tracking_track_duplicate(MovieTrackingTrack *track)
MovieTrackingMarker * BKE_tracking_marker_ensure(MovieTrackingTrack *track, int framenr)
static void path_clear_remained(MovieTrackingTrack *track, const int ref_frame)
bool BKE_tracking_plane_track_has_point_track(MovieTrackingPlaneTrack *plane_track, MovieTrackingTrack *track)
bool BKE_tracking_object_delete(MovieTracking *tracking, MovieTrackingObject *tracking_object)
void BKE_tracking_clipboard_free()
static void path_clear_up_to(MovieTrackingTrack *track, const int ref_frame)
static void tracking_average_markers(MovieTrackingTrack *dst_track, MovieTrackingTrack **src_tracks, const int num_src_tracks)
static void tracking_object_free(MovieTrackingObject *tracking_object)
static void accumulate_marker(MovieTrackingMarker *dst_marker, const MovieTrackingMarker *src_marker)
void BKE_tracking_marker_get_subframe_position(MovieTrackingTrack *track, float framenr, float pos[2])
static int channels_start_sort(const void *a, const void *b)
void BKE_tracking_track_free(MovieTrackingTrack *track)
void BKE_tracking_camera_principal_point_pixel_get(MovieClip *clip, float r_principal_point_pixel[2])
MovieTrackingObject * BKE_tracking_find_object_for_track(const MovieTracking *tracking, const MovieTrackingTrack *track)
MovieTrackingMarker * BKE_tracking_marker_get_exact(MovieTrackingTrack *track, int framenr)
void BKE_tracking_free(MovieTracking *tracking)
static void tracking_reconstruction_copy(TrackingCopyContext *, MovieTrackingReconstruction *reconstruction_dst, const MovieTrackingReconstruction *reconstruction_src, const int)
void BKE_tracking_track_unique_name(ListBase *tracksbase, MovieTrackingTrack *track)
void BKE_tracking_plane_track_unique_name(ListBase *plane_tracks_base, MovieTrackingPlaneTrack *plane_track)
bool BKE_tracking_track_has_enabled_marker_at_frame(MovieTrackingTrack *track, int framenr)
void BKE_tracking_undistort_v2(MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
void BKE_tracking_plane_tracks_replace_point_track(MovieTracking *tracking, MovieTrackingTrack *old_track, MovieTrackingTrack *new_track)
static void tracking_dopesheet_channels_calc(MovieTracking *tracking)
void BKE_tracking_tracks_average(MovieTrackingTrack *dst_track, MovieTrackingTrack **src_tracks, const int num_src_tracks)
MovieTrackingTrack * BKE_tracking_track_add(MovieTracking *tracking, ListBase *tracksbase, float x, float y, int framenr, int width, int height)
MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get(MovieTrackingPlaneTrack *plane_track, int framenr)
void BKE_tracking_plane_track_replace_point_track(MovieTrackingPlaneTrack *plane_track, MovieTrackingTrack *old_track, MovieTrackingTrack *new_track)
static void tracking_dopesheet_free(MovieTrackingDopesheet *dopesheet)
void BKE_tracking_distort_v2(MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
void BKE_tracking_camera_principal_point_pixel_set(MovieClip *clip, const float principal_point_pixel[2])
MovieTrackingObject * BKE_tracking_find_object_for_plane_track(const MovieTracking *tracking, const MovieTrackingPlaneTrack *plane_track)
static int channels_end_sort(const void *a, const void *b)
MovieDistortion * BKE_tracking_distortion_new(MovieTracking *tracking, int calibration_width, int calibration_height)
static bGPDlayer * track_mask_gpencil_layer_get(const MovieTrackingTrack *track)
void BKE_tracking_marker_clamp_search_size(MovieTrackingMarker *marker)
void BKE_tracking_tracks_join(MovieTracking *tracking, MovieTrackingTrack *dst_track, MovieTrackingTrack *src_track)
static int channels_longest_segment_sort(const void *a, const void *b)
static void tracking_reconstruction_free(MovieTrackingReconstruction *reconstruction)
void BKE_tracking_get_rna_path_for_plane_track(const MovieTracking *tracking, const MovieTrackingPlaneTrack *plane_track, char *rna_path, size_t rna_path_maxncpy)
static void tracking_dopesheet_channels_segments_calc(MovieTrackingDopesheetChannel *channel)
void BKE_tracking_clipboard_copy_tracks(MovieTracking *, MovieTrackingObject *tracking_object)
float * tracking_track_get_mask_for_region(const int frame_width, const int frame_height, const float region_min[2], const float region_max[2], const MovieTrackingTrack *track)
MovieTrackingTrack * BKE_tracking_object_find_track_with_name(MovieTrackingObject *tracking_object, const char *name)
void BKE_tracking_get_rna_path_prefix_for_plane_track(const MovieTracking *tracking, const MovieTrackingPlaneTrack *plane_track, char *rna_path, size_t rna_path_maxncpy)
static struct @205211273161017215362131345241225335155264063046 tracking_clipboard
MovieTrackingPlaneTrack * BKE_tracking_object_find_plane_track_with_name(MovieTrackingObject *tracking_object, const char *name)
MovieTrackingObject * BKE_tracking_object_get_camera(const MovieTracking *tracking)
void BKE_tracking_camera_shift_get(MovieTracking *tracking, int winx, int winy, float *shiftx, float *shifty)
static void tracking_average_tracks(MovieTrackingTrack *dst_track, MovieTrackingTrack **src_tracks, const int num_src_tracks)
bool BKE_tracking_plane_track_remove_point_track(MovieTrackingPlaneTrack *plane_track, MovieTrackingTrack *track)
static int channels_alpha_sort(const void *a, const void *b)
MovieTrackingPlaneMarker * BKE_tracking_plane_marker_ensure(MovieTrackingPlaneTrack *plane_track, int framenr)
ImBuf * BKE_tracking_undistort_frame(MovieTracking *tracking, ImBuf *ibuf, int calibration_width, int calibration_height, float overscan)
void BKE_tracking_distortion_distort_v2(MovieDistortion *distortion, const float co[2], float r_co[2])
static void track_mask_set_pixel_cb(int x, int x_end, int y, void *user_data)
void BKE_tracking_clipboard_paste_tracks(MovieTracking *, MovieTrackingObject *tracking_object)
bool BKE_tracking_track_has_marker_at_frame(MovieTrackingTrack *track, int framenr)
void BKE_tracking_track_flag_clear(MovieTrackingTrack *track, int area, int flag)
void BKE_tracking_tracks_deselect_all(ListBase *tracksbase)
static int compare_firstlast_putting_undefined_first(bool inverse, bool a_markerless, int a_value, bool b_markerless, int b_value)
bool BKE_tracking_clipboard_has_tracks()
void BKE_tracking_distortion_update(MovieDistortion *distortion, MovieTracking *tracking, int calibration_width, int calibration_height)
static void disable_imbuf_channels(ImBuf *ibuf, const MovieTrackingTrack *track, const bool grayscale)
bool BKE_tracking_marker_get_interpolated(MovieTrackingTrack *track, const int framenr, MovieTrackingMarker *r_marker)
static int reconstructed_camera_index_get(MovieTrackingReconstruction *reconstruction, int framenr, bool nearest)
static int coverage_from_count(int count)
void BKE_tracking_marker_delete(MovieTrackingTrack *track, int framenr)
void BKE_tracking_marker_clamp_search_position(MovieTrackingMarker *marker)
static int channels_start_inverse_sort(const void *a, const void *b)
static Value parallel_reduce(const int range, const Value &identity, const Function &function, const Reduction &reduction)
MovieTrackingObject * BKE_tracking_object_get_active(const MovieTracking *tracking)
static int channels_longest_segment_inverse_sort(const void *a, const void *b)
static void track_mask_gpencil_layer_rasterize(const int frame_width, const int frame_height, const float region_min[2], const bGPDlayer *layer, float *mask, const int mask_width, const int mask_height)
void BKE_tracking_get_projection_matrix(MovieTracking *tracking, MovieTrackingObject *tracking_object, int framenr, int winx, int winy, float mat[4][4])
MovieDistortion * BKE_tracking_distortion_copy(MovieDistortion *distortion)
static void tracking_plane_tracks_copy(TrackingCopyContext *ctx, ListBase *plane_tracks_list_dst, const ListBase *plane_tracks_list_src, const int flag)
void BKE_tracking_tracks_first_last_frame_minmax(MovieTrackingTrack **tracks, const int num_tracks, int *r_first_frame, int *r_last_frame)
MovieTrackingObject * BKE_tracking_object_add(MovieTracking *tracking, const char *name)
void BKE_tracking_plane_marker_delete(MovieTrackingPlaneTrack *plane_track, int framenr)
void BKE_tracking_copy(MovieTracking *tracking_dst, const MovieTracking *tracking_src, const int flag)
MovieReconstructedCamera * BKE_tracking_camera_get_reconstructed(MovieTracking *, MovieTrackingObject *tracking_object, int framenr)
void BKE_tracking_dopesheet_update(MovieTracking *tracking)
MovieTrackingMarker * BKE_tracking_marker_get(MovieTrackingTrack *track, int framenr)
void BKE_tracking_distortion_bounds_deltas(MovieDistortion *distortion, const int size[2], const int calibration_size[2], const bool undistort, int *r_right, int *r_left, int *r_bottom, int *r_top)
void BKE_tracking_plane_tracks_remove_point_track(MovieTracking *tracking, MovieTrackingTrack *track)
void BKE_tracking_plane_tracks_deselect_all(ListBase *plane_tracks_base)
void BKE_tracking_plane_track_free(MovieTrackingPlaneTrack *plane_track)
static int channels_average_error_inverse_sort(const void *a, const void *b)
MovieTrackingObject * BKE_tracking_object_get_named(MovieTracking *tracking, const char *name)
static void tracking_stabilization_copy(MovieTrackingStabilization *stabilization_dst, const MovieTrackingStabilization *stabilization_src, const int)
void BKE_tracking_dopesheet_tag_update(MovieTracking *tracking)
void BKE_tracking_get_rna_path_prefix_for_track(const MovieTracking *tracking, const MovieTrackingTrack *track, char *rna_path, size_t rna_path_maxncpy)
BLI_INLINE int plane_marker_size_len_in_pixels(const float a[2], const float b[2], const int frame_width, const int frame_height)
ImBuf * BKE_tracking_distortion_exec(MovieDistortion *distortion, MovieTracking *tracking, ImBuf *ibuf, int calibration_width, int calibration_height, float overscan, bool undistort)
static int channels_total_track_inverse_sort(const void *a, const void *b)
void tracking_marker_insert_disabled(MovieTrackingTrack *track, const MovieTrackingMarker *ref_marker, bool before, bool overwrite)
void tracking_principal_point_pixel_to_normalized(const float principal_point_pixel[2], const int frame_width, const int frame_height, float r_principal_point_normalized[2])
void tracking_cameraIntrinscisOptionsFromTracking(MovieTracking *tracking, const int calibration_width, const int calibration_height, libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
void tracking_get_marker_coords_for_tracking(int frame_width, int frame_height, const MovieTrackingMarker *marker, double search_pixel_x[5], double search_pixel_y[5])
void tracking_get_search_origin_frame_pixel(int frame_width, int frame_height, const MovieTrackingMarker *marker, float frame_pixel[2])
void tracking_principal_point_normalized_to_pixel(const float principal_point_normalized[2], const int frame_width, const int frame_height, float r_principal_point_pixel[2])