23typedef double Vec2[2];
30 *r_x1 = x1 = MEM_cnew_array<Vec2>(plane_track->
point_tracksnr,
"point correspondences x1");
31 *r_x2 = x2 = MEM_cnew_array<Vec2>(plane_track->
point_tracksnr,
"point correspondences x2");
33 int correspondence_index = 0;
41 if (point_marker1 !=
nullptr && point_marker2 !=
nullptr) {
43 x1[correspondence_index][0] = point_marker1->
pos[0];
44 x1[correspondence_index][1] = point_marker1->
pos[1];
46 x2[correspondence_index][0] = point_marker2->
pos[0];
47 x2[correspondence_index][1] = point_marker2->
pos[1];
49 correspondence_index++;
53 return correspondence_index;
66 int frame_delta = direction > 0 ? 1 : -1;
70 for (
int current_frame = start_frame;; current_frame += frame_delta) {
72 plane_track, current_frame + frame_delta);
74 if (next_plane_marker ==
nullptr) {
79 keyframe_plane_marker = next_plane_marker;
88 new_plane_marker = *start_plane_marker;
91 for (
int current_frame = start_frame;; current_frame += frame_delta) {
93 plane_track, current_frame + frame_delta);
95 double H_double[3][3];
107 plane_track, current_frame, current_frame + frame_delta, &x1, &x2);
108 if (num_correspondences < 4) {
118 for (
int i = 0; i < 4; i++) {
119 float vec[3] = {0.0f, 0.0f, 1.0f}, vec2[3];
132 new_plane_marker.
framenr = current_frame + frame_delta;
134 if (!retrack && keyframe_plane_marker && next_plane_marker &&
138 (
float(keyframe_plane_marker->
framenr) - start_plane_marker->
framenr);
140 fac = 3 * fac * fac - 2 * fac * fac * fac;
142 for (
int i = 0; i < 4; i++) {
169 int index = plane_marker - plane_track->
markers;
170 int frame_delta = direction > 0 ? 1 : -1;
172 while (index >= 0 && index < plane_track->markersnr) {
176 plane_marker += frame_delta;
190 if (prev_plane_keyframe !=
nullptr && next_plane_keyframe !=
nullptr) {
197 else if (prev_plane_keyframe !=
nullptr) {
200 else if (next_plane_keyframe !=
nullptr) {
218 double H_double[3][3];
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_insert(struct MovieTrackingPlaneTrack *plane_track, struct MovieTrackingPlaneMarker *plane_marker)
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get_exact(struct MovieTrackingPlaneTrack *plane_track, int framenr)
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get(struct MovieTrackingPlaneTrack *plane_track, int framenr)
void copy_m3_m3d(float m1[3][3], const double m2[3][3])
void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
MINLINE void copy_v2db_v2fl(double r[2], const float a[2])
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])
Read Guarded memory(de)allocation.
draw_view in_light_buf[] float
void libmv_homography2DFromCorrespondencesEuc(double(*x1)[2], double(*x2)[2], int num_points, double H[3][3])
void MEM_freeN(void *vmemh)
MovieTrackingTrack ** point_tracks
MovieTrackingPlaneMarker * markers
static void track_plane_from_existing_motion(MovieTrackingPlaneTrack *plane_track, int start_frame, int direction, bool retrack)
static int point_markers_correspondences_on_both_image(MovieTrackingPlaneTrack *plane_track, int frame1, int frame2, Vec2 **r_x1, Vec2 **r_x2)
BLI_INLINE void float_corners_to_double(float corners[4][2], double double_corners[4][2])
void BKE_tracking_retrack_plane_from_existing_motion_at_segment(MovieTrackingPlaneTrack *plane_track, int start_frame)
static MovieTrackingPlaneMarker * find_plane_keyframe(MovieTrackingPlaneTrack *plane_track, int start_frame, int direction)
void BKE_tracking_track_plane_from_existing_motion(MovieTrackingPlaneTrack *plane_track, int start_frame)
void BKE_tracking_homography_between_two_quads(float reference_corners[4][2], float corners[4][2], float H[3][3])