54#include "RNA_prototypes.hh"
148 channel = channel->
next;
202 if (track_src->markers) {
219 const ListBase *plane_tracks_list_src,
226 if (plane_track_src->markers) {
240 BLI_addtail(plane_tracks_list_dst, plane_track_dst);
252 *reconstruction_dst = *reconstruction_src;
253 if (reconstruction_src->
cameras) {
264 *stabilization_dst = *stabilization_src;
274 *tracking_object_dst = *tracking_object_src;
298 const ListBase *tracking_objects_src,
306 BLI_addtail(tracking_objects_dst, tracking_object_dst);
314 *tracking_dst = *tracking_src;
327 tracking_dst->
stats =
nullptr;
396 float viewfac, pixsize,
left, right, bottom,
top, clipsta, clipend;
399 float shiftx, shifty, winside =
float(
min_ii(winx, winy));
413 pixsize = clipsta / viewfac;
415 left = -0.5f *
float(winx) + shiftx * winside;
416 bottom = -0.5f * (ycor) *
float(winy) + shifty * winside;
417 right = 0.5f *
float(winx) + shiftx * winside;
418 top = 0.5f * (ycor) *
float(winy) + shifty * winside;
450 next_track = track->
next;
489 if (track->prev ==
nullptr) {
541 const float pattern_size[2] = {half_pattern_px / width, half_pattern_px / height};
542 const float search_size[2] = {half_search_px / width, half_search_px / height};
573 new_track->
next = new_track->
prev =
nullptr;
593 sizeof(track->
name));
608 const int last_marker_index = track->
markersnr - 1;
614 const int num_tracks,
618 *r_first_frame = INT_MAX;
619 *r_last_frame = INT_MIN;
620 for (
int i = 0;
i < num_tracks; ++
i) {
622 int track_first_frame, track_last_frame;
624 *r_first_frame =
min_ii(*r_first_frame, track_first_frame);
625 *r_last_frame =
max_ii(*r_last_frame, track_last_frame);
631 int num_selected_tracks = 0;
634 ++num_selected_tracks;
637 return num_selected_tracks;
655 if (num_selected_tracks == 0) {
660 num_selected_tracks,
"selected tracks array");
661 int source_track_index = 0;
666 source_tracks[source_track_index] = track;
667 ++source_track_index;
670 *r_num_tracks = num_selected_tracks;
672 return source_tracks;
723 for (
int a = 1; a < track->
markersnr; a++) {
740 for (
int a = track->
markersnr - 1; a >= 0; a--) {
764 marker_new = *marker;
797 int i = 0, a = 0,
b = 0, tot;
805 markers[
i] = src_track->
markers[a++];
811 markers[
i] = src_track->
markers[a++];
833 marker_a = &src_track->
markers[a];
854 for (
int j = 0; j <
len; j++) {
858 fac = 1.0f / (
len - 1) * j;
865 marker_a = &src_track->
markers[a];
917 for (
int corner = 0; corner < 4; ++corner) {
935 for (
int corner = 0; corner < 4; ++corner) {
946 const int num_src_tracks)
949 int first_frame, last_frame;
951 src_tracks, num_src_tracks, &first_frame, &last_frame);
952 if (last_frame < first_frame) {
955 const int num_frames = last_frame - first_frame + 1;
959 num_frames,
"tracks average accumulator");
961 for (
int frame = first_frame; frame <= last_frame; ++frame) {
962 const int frame_index = frame - first_frame;
963 accumulator[frame_index].
framenr = frame;
968 for (
int track_index = 0; track_index < num_src_tracks; ++track_index) {
970 for (
int frame = first_frame; frame <= last_frame; ++frame) {
975 const int frame_index = frame - first_frame;
977 ++counters[frame_index];
982 for (
int frame = first_frame; frame <= last_frame; ++frame) {
984 const int frame_index = frame - first_frame;
985 if (!counters[frame_index]) {
988 const float multiplier = 1.0f /
float(counters[frame_index]);
1003 const int num_src_tracks)
1007 for (
int track_index = 0; track_index < num_src_tracks; track_index++) {
1015 const int num_src_tracks)
1017 if (num_src_tracks == 0) {
1026 int selection_index,
1034 if (cur == selection_index) {
1035 *r_tracksbase = &
object->tracks;
1044 *r_tracksbase =
nullptr;
1070 frame = frame->
next;
1078 layer = layer->
next;
1093 size_t index = size_t(
y) *
data->mask_width +
x;
1094 size_t index_end = size_t(
y) *
data->mask_width + x_end;
1096 data->mask[index] = 1.0f;
1097 }
while (++index != index_end);
1101 const int frame_height,
1102 const float region_min[2],
1105 const int mask_width,
1106 const int mask_height)
1112 data.mask_width = mask_width;
1113 data.mask_height = mask_height;
1123 mask_points[
i][0] = stroke_points[
i].
x * frame_width - region_min[0];
1124 mask_points[
i][1] = stroke_points[
i].
y * frame_height - region_min[1];
1130 stroke = stroke->
next;
1132 frame = frame->
next;
1137 const int frame_height,
1138 const float region_min[2],
1139 const float region_max[2],
1142 float *
mask =
nullptr;
1144 if (layer !=
nullptr) {
1145 const int mask_width = region_max[0] - region_min[0];
1146 const int mask_height = region_max[1] - region_min[1];
1149 frame_width, frame_height, region_min, layer,
mask, mask_width, mask_height);
1155 const int frame_height,
1160 const float region_min[2] = {
1164 const float region_max[2] = {
1169 frame_width, frame_height, region_min, region_max, track);
1176 const FCurve *weight_fcurve;
1177 float weight = track->
weight;
1180 &clip->
id, track, &RNA_MovieTrackingTrack,
"weight", 0,
nullptr);
1182 if (weight_fcurve) {
1246 *old_marker = *marker;
1271 memmove(track->
markers + a + 2,
1276 track->
markers[a + 1] = *marker;
1278 return &track->
markers[a + 1];
1285 while (a < track->markersnr) {
1310 float pat_min[2], pat_max[2];
1313 for (
int a = 0; a < 2; a++) {
1315 for (
int b = 0;
b < 4;
b++) {
1320 for (
int b = 0;
b < 4;
b++) {
1329 float pat_min[2], pat_max[2];
1332 for (
int a = 0; a < 2; a++) {
1340 float pat_min[2], pat_max[2];
1346 for (
int a = 0; a < 2; a++) {
1360 const int num_markers = track->
markersnr;
1362 if (num_markers == 0) {
1363 BLI_assert_msg(0,
"Detected degenerated track, should never happen.");
1367 int left_boundary = 0;
1368 int right_boundary = num_markers;
1369 while (left_boundary < right_boundary) {
1370 const int median_index = (left_boundary + right_boundary) / 2;
1373 if (marker->
framenr == framenr) {
1377 if (marker->
framenr < framenr) {
1378 left_boundary = median_index + 1;
1382 right_boundary = median_index - 1;
1386 const int closest_index =
clamp_i(right_boundary, 0, num_markers - 1);
1388 return &track->
markers[closest_index];
1395 if (marker->
framenr != framenr) {
1406 if (marker->
framenr != framenr) {
1409 marker_new = *marker;
1427 while (current_marker >= track->
markers && current_marker <= last_marker) {
1429 return current_marker;
1431 current_marker += direction;
1442 if (closest_marker ==
nullptr) {
1446 *r_marker = *closest_marker;
1451 track, closest_marker, -1);
1452 if (left_marker ==
nullptr) {
1457 track, closest_marker + 1, 1);
1458 if (right_marker ==
nullptr) {
1462 if (left_marker == right_marker) {
1463 *r_marker = *left_marker;
1467 const float factor =
float(framenr - left_marker->
framenr) /
1472 for (
int i = 0;
i < 4;
i++) {
1485 if (framenr == left_marker->
framenr) {
1486 r_marker->
flag = left_marker->
flag;
1488 else if (framenr == right_marker->
framenr) {
1489 r_marker->
flag = right_marker->
flag;
1514 if (marker != marker_last) {
1522 float fac = (framenr - int(framenr)) / (marker_next->
framenr - marker->
framenr);
1549 float tracks_min[2], tracks_max[2];
1550 int num_selected_tracks = 0;
1559 float pattern_min[2], pattern_max[2];
1565 num_selected_tracks++;
1569 if (num_selected_tracks < 4) {
1583 "new plane tracks array");
1584 int track_index = 0;
1594 plane_marker.
framenr = framenr;
1595 plane_marker.
flag = 0;
1600 plane_marker.
corners[1][0] = tracks_max[0];
1601 plane_marker.
corners[1][1] = tracks_min[1];
1602 plane_marker.
corners[3][0] = tracks_min[0];
1603 plane_marker.
corners[3][1] = tracks_max[1];
1622 sizeof(plane_track->
name));
1664 new_point_tracks[track_index++] = plane_track->
point_tracks[
i];
1728 if (old_plane_marker) {
1730 *old_plane_marker = *plane_marker;
1732 return old_plane_marker;
1750 memmove(plane_track->
markers + a + 2,
1755 plane_track->
markers[a + 1] = *plane_marker;
1757 return &plane_track->
markers[a + 1];
1764 while (a < plane_track->markersnr) {
1767 memmove(plane_track->
markers + a,
1776 plane_track->
markers =
nullptr;
1801 if (framenr < plane_track->markers[0].framenr) {
1802 return &plane_track->
markers[0];
1810 while (a < plane_track->markersnr && plane_track->
markers[a].
framenr <= framenr) {
1814 return &plane_track->
markers[a];
1820 return &plane_track->
markers[a - 1];
1827 return &plane_track->
markers[a];
1834 return &plane_track->
markers[a];
1842 if (plane_marker->
framenr != framenr) {
1846 return plane_marker;
1854 if (plane_marker->
framenr != framenr) {
1857 plane_marker_new = *plane_marker;
1858 plane_marker_new.
framenr = framenr;
1863 return plane_marker;
1868 float corners[4][2])
1872 if (marker != marker_last) {
1875 float fac = (framenr - int(framenr)) / (marker_next->
framenr - marker->
framenr);
1876 for (
int i = 0;
i < 4;
i++) {
1881 for (
int i = 0;
i < 4;
i++) {
1887 for (
int i = 0;
i < 4;
i++) {
1916 tracking_object->
scale = 1.0f;
1923 return tracking_object;
1963 sizeof(tracking_object->
name));
1969 if (
STREQ(tracking_object->name,
name)) {
1970 return tracking_object;
1986 return tracking_object;
2028 if (!reconstruction->
camnr) {
2032 if (framenr < cameras[0].framenr) {
2040 if (framenr > cameras[reconstruction->
camnr - 1].
framenr) {
2042 return reconstruction->
camnr - 1;
2052 if (cameras[a].framenr >= framenr) {
2056 while (a >= 0 && a < reconstruction->camnr) {
2057 int cfra = cameras[a].
framenr;
2061 if (d > 0 && cfra > framenr) {
2070 if (d < 0 && cfra < framenr) {
2079 if (cfra == framenr) {
2103 MovieTracking *tracking,
int winx,
int winy,
float *shiftx,
float *shifty)
2105 float principal_px[2];
2111 *shiftx = (0.5f * winx - principal_px[0]) / winx;
2112 *shifty = (0.5f * winy - principal_px[1]) / winx;
2124 scene->
r.
xsch = width;
2125 scene->
r.
ysch = height;
2128 scene->
r.
yasp = 1.0f;
2143 return &reconstruction->
cameras[a];
2161 if ((a < reconstruction->camnr - 1) && (cameras[a].framenr != framenr)) {
2162 float t = (framenr - cameras[a].
framenr) / (cameras[a + 1].framenr - cameras[a].framenr);
2173 float r_principal_point_pixel[2])
2177 int frame_width, frame_height;
2182 camera->
principal_point, frame_width, frame_height, r_principal_point_pixel);
2186 const float principal_point_pixel[2])
2190 int frame_width, frame_height;
2195 principal_point_pixel, frame_width, frame_height, camera->
principal_point);
2213 return a->
k1 ==
b->k1 && a->
k2 ==
b->k2 && a->
k3 ==
b->k3;
2263 int calibration_width,
2264 int calibration_height)
2270 tracking, calibration_width, calibration_height, &camera_intrinsics_options);
2288 int calibration_width,
2289 int calibration_height)
2294 tracking, calibration_width, calibration_height, &camera_intrinsics_options);
2312 *new_distortion = *distortion;
2315 return new_distortion;
2321 int calibration_width,
2322 int calibration_height,
2385 float inv_focal = 1.0f / distortion->
focal;
2386 double x = (co[0] - distortion->
principal_px[0]) * inv_focal,
2387 y = (co[1] - distortion->
principal_px[1] * aspy) * inv_focal;
2400 double x = co[0],
y = co[1];
2426 float principal_px[2];
2431 double x = (co[0] - principal_px[0]) / camera->
focal,
2432 y = (co[1] - principal_px[1] * aspy) / camera->
focal;
2453 double x = co[0],
y = co[1];
2457 float principal_px[2];
2461 r_co[0] =
float(
x) * camera->
focal + principal_px[0];
2462 r_co[1] =
float(
y) * camera->
focal + principal_px[1] * aspy;
2467 int calibration_width,
2468 int calibration_height,
2475 tracking, calibration_width, calibration_height);
2489 int calibration_width,
2490 int calibration_height,
2497 tracking, calibration_width, calibration_height);
2513template<
typename Value,
typename Function,
typename Reduction>
2515 const Value &identity,
2516 const Function &function,
2517 const Reduction &reduction)
2524 [&](
const IndexRange sub_range,
const Value &initial_value) {
2525 Value
result = initial_value;
2526 for (
const int64_t i : sub_range) {
2536 const int calibration_size[2],
2537 const bool undistort,
2545 auto distortion_function = [&](
const float2 &position) {
2554 float2 distorted_coordinates;
2570 std::numeric_limits<float>::lowest(),
2571 [&](
const int i,
float &accumulated_value) {
2572 accumulated_value =
math::max(accumulated_value,
2575 [&](
const float &a,
const float &
b) {
return math::max(a,
b); });
2580 std::numeric_limits<float>::max(),
2581 [&](
const int i,
float &accumulated_value) {
2582 accumulated_value =
math::min(accumulated_value, distortion_function(
float2(0.0f,
i)).
x);
2584 [&](
const float &a,
const float &
b) {
return math::min(a,
b); });
2589 std::numeric_limits<float>::max(),
2590 [&](
const int i,
float &accumulated_value) {
2591 accumulated_value =
math::min(accumulated_value, distortion_function(
float2(
i, 0.0f)).
y);
2593 [&](
const float &a,
const float &
b) {
return math::min(a,
b); });
2598 std::numeric_limits<float>::lowest(),
2599 [&](
const int i,
float &accumulated_value) {
2600 accumulated_value =
math::max(accumulated_value,
2603 [&](
const float &a,
const float &
b) {
return math::max(a,
b); });
2607 const float right_delta = maximum_x -
size[0];
2608 const float left_delta = 0.0f - minimum_x;
2609 const float bottom_delta = 0.0f - minimum_y;
2610 const float top_delta = maximum_y -
size[1];
2625 const bool grayscale)
2635 const int frame_height,
2636 const ImBuf *search_ibuf,
2639 const bool from_anchor,
2640 const bool use_mask,
2641 const int num_samples_x,
2642 const int num_samples_y,
2645 ImBuf *pattern_ibuf;
2646 double src_pixel_x[5], src_pixel_y[5];
2647 double warped_position_x, warped_position_y;
2648 float *
mask =
nullptr;
2650 if (num_samples_x <= 0 || num_samples_y <= 0) {
2660 frame_width, frame_height, marker, src_pixel_x, src_pixel_y);
2670 for (
int a = 0; a < 5; a++) {
2671 src_pixel_x[a] += double((track->
offset[0] * frame_width) -
2672 int(track->
offset[0] * frame_width));
2673 src_pixel_y[a] += double((track->
offset[1] * frame_height) -
2674 int(track->
offset[1] * frame_height));
2677 if (track->
offset[0] < 0.0f) {
2678 src_pixel_x[a] += 1.0;
2680 if (track->
offset[1] < 0.0f) {
2681 src_pixel_y[a] += 1.0;
2702 &warped_position_y);
2716 &warped_position_y);
2720 pos[0] = warped_position_x;
2721 pos[1] = warped_position_y;
2728 return pattern_ibuf;
2734 const bool anchored,
2735 const bool disable_channels)
2737 ImBuf *pattern_ibuf, *search_ibuf;
2738 float pat_min[2], pat_max[2];
2739 int num_samples_x, num_samples_y;
2743 num_samples_x = (pat_max[0] - pat_min[0]) * ibuf->
x;
2744 num_samples_y = (pat_max[1] - pat_min[1]) * ibuf->
y;
2763 pattern_ibuf =
nullptr;
2766 return pattern_ibuf;
2772 const bool anchored,
2773 const bool disable_channels)
2777 float search_origin[2];
2781 x = search_origin[0];
2782 y = search_origin[1];
2792 if (
w <= 0 || h <= 0) {
2800 if (disable_channels) {
2813 const int frame_width,
2814 const int frame_height)
2816 const float a_px[2] = {a[0] * frame_width, a[1] * frame_height};
2817 const float b_px[2] = {
b[0] * frame_width,
b[1] * frame_height};
2829 const int frame_width = frame_ibuf->
x;
2830 const int frame_height = frame_ibuf->
y;
2834 corners[0], corners[3], frame_width, frame_height);
2836 corners[1], corners[2], frame_width, frame_height);
2840 corners[3], corners[2], frame_width, frame_height);
2842 corners[0], corners[1], frame_width, frame_height);
2845 const int num_samples_x =
max_ii(top_side_len_px, bottom_side_len_px);
2846 const int num_samples_y =
max_ii(left_side_len_px, right_side_len_px);
2855 const double src_pixel_x[4] = {corners[0][0] * frame_width,
2856 corners[1][0] * frame_width,
2857 corners[2][0] * frame_width,
2858 corners[3][0] * frame_width};
2859 const double src_pixel_y[4] = {corners[0][1] * frame_height,
2860 corners[1][1] * frame_height,
2861 corners[2][1] * frame_height,
2862 corners[3][1] * frame_height};
2865 double warped_position_x, warped_position_y;
2880 &warped_position_y);
2894 &warped_position_y);
2904 ImBuf *ibuf,
bool disable_red,
bool disable_green,
bool disable_blue,
bool grayscale)
2906 if (!disable_red && !disable_green && !disable_blue && !grayscale) {
2913 float scale = (disable_red ? 0.0f : 0.2126f) + (disable_green ? 0.0f : 0.7152f) +
2914 (disable_blue ? 0.0f : 0.0722f);
2916 for (
int y = 0;
y < ibuf->
y;
y++) {
2917 for (
int x = 0;
x < ibuf->
x;
x++) {
2918 int pixel = ibuf->
x *
y +
x;
2922 float r = disable_red ? 0.0f : rrgbf[0];
2923 float g = disable_green ? 0.0f : rrgbf[1];
2924 float b = disable_blue ? 0.0f : rrgbf[2];
2927 float gray = (0.2126f * r + 0.7152f * g + 0.0722f *
b) / scale;
2929 rrgbf[0] = rrgbf[1] = rrgbf[2] = gray;
2939 uchar r = disable_red ? 0 : rrgb[0];
2940 uchar g = disable_green ? 0 : rrgb[1];
2941 uchar b = disable_blue ? 0 : rrgb[2];
2944 float gray = (0.2126f * r + 0.7152f * g + 0.0722f *
b) / scale;
2946 rrgb[0] = rrgb[1] = rrgb[2] = gray;
3029 bool inverse,
bool a_markerless,
int a_value,
bool b_markerless,
int b_value)
3031 if (a_markerless && b_markerless) {
3047 if (a_value < b_value) {
3053 if (a_value > b_value) {
3161 bool first_not_disabled_marker_framenr_set;
3176 first_not_disabled_marker_framenr_set =
false;
3187 if (marker->
framenr != prev_fra + 1) {
3194 if (!first_not_disabled_marker_framenr_set) {
3196 first_not_disabled_marker_framenr_set =
true;
3217 "tracking channel segments");
3233 if (marker->
framenr != prev_fra + 1) {
3268 if (!show_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
3277 "tracking dopesheet channel");
3278 channel->
track = track;
3365 int frames, start_frame = INT_MAX, end_frame = -INT_MAX;
3366 int *per_frame_counter;
3367 int prev_coverage, last_segment_frame;
3371 start_frame =
min_ii(start_frame, track->markers[0].framenr);
3372 end_frame =
max_ii(end_frame, track->markers[track->markersnr - 1].framenr);
3375 if (start_frame > end_frame) {
3380 frames = end_frame - start_frame + 1;
3387 for (
int i = 0;
i < track->markersnr;
i++) {
3392 per_frame_counter[marker->
framenr - start_frame]++;
3399 last_segment_frame = start_frame;
3402 if (!per_frame_counter[0]) {
3406 for (
int i = 1;
i < frames;
i++) {
3410 if (
i == frames - 1 && !per_frame_counter[
i]) {
3414 if (coverage != prev_coverage ||
i == frames - 1) {
3416 int end_segment_frame =
i - 1 + start_frame;
3418 if (end_segment_frame == last_segment_frame) {
3419 end_segment_frame++;
3423 "tracking coverage segment");
3424 coverage_segment->
coverage = prev_coverage;
3425 coverage_segment->
start_frame = last_segment_frame;
3426 coverage_segment->
end_frame = end_segment_frame;
3430 last_segment_frame = end_segment_frame;
3433 prev_coverage = coverage;
3443 dopesheet->
ok =
false;
3453 if (dopesheet->
ok) {
3466 dopesheet->
ok =
true;
3474 return tracking_object;
3484 if (
BLI_findindex(&tracking_object->plane_tracks, plane_track) != -1) {
3485 return tracking_object;
3494 size_t rna_path_maxncpy)
3499 if (tracking_object ==
nullptr) {
3500 BLI_snprintf_utf8(rna_path, rna_path_maxncpy,
"tracking.tracks[\"%s\"]", track_name_esc);
3503 char object_name_esc[
MAX_NAME * 2];
3507 "tracking.objects[\"%s\"].tracks[\"%s\"]",
3516 size_t rna_path_maxncpy)
3519 if (tracking_object ==
nullptr) {
3523 char object_name_esc[
MAX_NAME * 2];
3525 BLI_snprintf_utf8(rna_path, rna_path_maxncpy,
"tracking.objects[\"%s\"]", object_name_esc);
3532 size_t rna_path_maxncpy)
3538 if (tracking_object ==
nullptr) {
3539 BLI_snprintf_utf8(rna_path, rna_path_maxncpy,
"tracking.plane_tracks[\"%s\"]", track_name_esc);
3542 char object_name_esc[
MAX_NAME * 2];
3546 "tracking.objects[\"%s\"].plane_tracks[\"%s\"]",
3555 size_t rna_path_maxncpy)
3559 if (tracking_object ==
nullptr) {
3563 char object_name_esc[
MAX_NAME * 2];
3566 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
int char char int BLI_strcasecmp(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
size_t size_t size_t BLI_snprintf_utf8(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define SNPRINTF_UTF8(dst, format,...)
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
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.
@ TRACKING_DOPE_SELECTED_ONLY
@ TRACKING_DOPE_SORT_INVERSE
@ TRACKING_DOPE_SHOW_HIDDEN
@ TRACK_PREVIEW_GRAYSCALE
@ TRACK_MOTION_MODEL_TRANSLATION
@ TRACKING_DOPE_SORT_START
@ TRACKING_DOPE_SORT_AVERAGE_ERROR
@ TRACKING_DOPE_SORT_LONGEST
@ TRACKING_DOPE_SORT_NAME
@ TRACKING_DOPE_SORT_TOTAL
@ TRACKING_SHOW_STAB_TRACKS
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
@ TRACKING_FILTER_BILINEAR
@ TRACK_ALGORITHM_FLAG_USE_BRUTE
@ TRACKING_COVERAGE_ACCEPTABLE
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.
#define MEM_reallocN(vmemh, len)
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
MatBase< C, R > inverse(MatBase< C, R >) RET
VecBase< float, 2 > float2
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 struct @163017152225275155122031115054340341101213077336 tracking_clipboard
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)
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])