Blender V4.3
tracking_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
8
9#include "BKE_tracking.h"
10#include "BLI_math_vector.h"
12
13namespace blender {
14
15namespace {
16
17class TrackingTest : public ::testing::Test {
18 protected:
19 MovieTrackingMarker *addMarkerToTrack(MovieTrackingTrack *track,
20 int frame_number,
21 const float2 &position = float2(0.0f, 0.0f),
22 int flag = 0)
23 {
24 MovieTrackingMarker marker = {{0.0f}};
25 copy_v2_v2(marker.pos, position);
26 marker.framenr = frame_number;
27 marker.flag = flag;
28 return BKE_tracking_marker_insert(track, &marker);
29 }
30};
31
32} // namespace
33
35{
36 {
37 MovieTrackingTrack track = {nullptr};
38
39 addMarkerToTrack(&track, 10);
40
41 EXPECT_EQ(BKE_tracking_marker_get(&track, 0), &track.markers[0]);
42 EXPECT_EQ(BKE_tracking_marker_get(&track, 10), &track.markers[0]);
43 EXPECT_EQ(BKE_tracking_marker_get(&track, 20), &track.markers[0]);
44
46 }
47
48 {
49 MovieTrackingTrack track = {nullptr};
50
51 addMarkerToTrack(&track, 1);
52 addMarkerToTrack(&track, 10);
53
54 {
55 const MovieTrackingMarker *marker = BKE_tracking_marker_get(&track, 1);
56 EXPECT_NE(marker, nullptr);
57 EXPECT_EQ(marker->framenr, 1);
58 }
59
60 {
61 const MovieTrackingMarker *marker = BKE_tracking_marker_get(&track, 5);
62 EXPECT_NE(marker, nullptr);
63 EXPECT_EQ(marker->framenr, 1);
64 }
65
67 }
68
69 {
70 {
71 MovieTrackingTrack track = {nullptr};
72
73 addMarkerToTrack(&track, 1);
74 addMarkerToTrack(&track, 2);
75 addMarkerToTrack(&track, 10);
76
77 EXPECT_EQ(BKE_tracking_marker_get(&track, 0), &track.markers[0]);
78 EXPECT_EQ(BKE_tracking_marker_get(&track, 1), &track.markers[0]);
79 EXPECT_EQ(BKE_tracking_marker_get(&track, 2), &track.markers[1]);
80 EXPECT_EQ(BKE_tracking_marker_get(&track, 3), &track.markers[1]);
81 EXPECT_EQ(BKE_tracking_marker_get(&track, 9), &track.markers[1]);
82 EXPECT_EQ(BKE_tracking_marker_get(&track, 10), &track.markers[2]);
83 EXPECT_EQ(BKE_tracking_marker_get(&track, 11), &track.markers[2]);
84
86 }
87 }
88}
89
91{
92 MovieTrackingTrack track = {nullptr};
93
94 addMarkerToTrack(&track, 1);
95 addMarkerToTrack(&track, 10);
96
97 {
98 const MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(&track, 1);
99 EXPECT_NE(marker, nullptr);
100 EXPECT_EQ(marker->framenr, 1);
101 }
102
103 {
104 const MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(&track, 5);
105 EXPECT_EQ(marker, nullptr);
106 }
107
109}
110
112{
113 /* Simple case, no disabled markers in a way. */
114 {
115 MovieTrackingTrack track = {nullptr};
116
117 addMarkerToTrack(&track, 1, float2(1.0f, 5.0f));
118 addMarkerToTrack(&track, 10, float2(2.0f, 1.0f));
119
120 {
121 MovieTrackingMarker interpolated_marker;
122 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 1, &interpolated_marker));
123 EXPECT_EQ(interpolated_marker.framenr, 1);
124 EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.0f, 5.0f), 1e-6f);
125 }
126
127 {
128 MovieTrackingMarker interpolated_marker;
129 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 10, &interpolated_marker));
130 EXPECT_EQ(interpolated_marker.framenr, 10);
131 EXPECT_V2_NEAR(interpolated_marker.pos, float2(2.0f, 1.0f), 1e-6f);
132 }
133
134 {
135 MovieTrackingMarker interpolated_marker;
136 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 4, &interpolated_marker));
137 EXPECT_EQ(interpolated_marker.framenr, 4);
138 EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.3333333f, 3.6666666f), 1e-6f);
139 }
140
142 }
143
144 /* More comprehensive test, which resembles real-life tracking scenario better. */
145 {
146 MovieTrackingTrack track = {nullptr};
147
148 addMarkerToTrack(&track, 1, float2(1.0f, 5.0f));
149 addMarkerToTrack(&track, 2, float2(0.0f, 0.0f), MARKER_DISABLED);
150 addMarkerToTrack(&track, 9, float2(0.0f, 0.0f), MARKER_DISABLED);
151 addMarkerToTrack(&track, 10, float2(2.0f, 1.0f));
152
153 {
154 MovieTrackingMarker interpolated_marker;
155 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 1, &interpolated_marker));
156 EXPECT_EQ(interpolated_marker.framenr, 1);
157 EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.0f, 5.0f), 1e-6f);
158 }
159
160 {
161 MovieTrackingMarker interpolated_marker;
162 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 10, &interpolated_marker));
163 EXPECT_EQ(interpolated_marker.framenr, 10);
164 EXPECT_V2_NEAR(interpolated_marker.pos, float2(2.0f, 1.0f), 1e-6f);
165 }
166
167 {
168 MovieTrackingMarker interpolated_marker;
169 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 4, &interpolated_marker));
170 EXPECT_EQ(interpolated_marker.framenr, 4);
171 EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.3333333f, 3.6666666f), 1e-6f);
172 }
173
174 {
175 MovieTrackingMarker interpolated_marker;
176 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 9, &interpolated_marker));
177 EXPECT_EQ(interpolated_marker.framenr, 9);
178 EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.888888f, 1.4444444f), 1e-6f);
179 }
180
182 }
183
184 /* Tracked/keyframed flag check. */
185 {
186 MovieTrackingTrack track = {nullptr};
187
188 addMarkerToTrack(&track, 1, float2(1.0f, 5.0f), MARKER_TRACKED);
189 addMarkerToTrack(&track, 10, float2(2.0f, 1.0f), MARKER_TRACKED);
190
191 {
192 MovieTrackingMarker interpolated_marker;
193 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 1, &interpolated_marker));
194 EXPECT_EQ(interpolated_marker.flag, MARKER_TRACKED);
195 }
196
197 {
198 MovieTrackingMarker interpolated_marker;
199 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 10, &interpolated_marker));
200 EXPECT_EQ(interpolated_marker.flag, MARKER_TRACKED);
201 }
202
203 {
204 MovieTrackingMarker interpolated_marker;
205 EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 4, &interpolated_marker));
206 EXPECT_EQ(interpolated_marker.flag, 0);
207 }
208
210 }
211}
212
213} // namespace blender
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1358
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1391
void BKE_tracking_track_free(struct MovieTrackingTrack *track)
Definition tracking.cc:596
bool BKE_tracking_marker_get_interpolated(struct MovieTrackingTrack *track, int framenr, struct MovieTrackingMarker *r_marker)
Definition tracking.cc:1437
struct MovieTrackingMarker * BKE_tracking_marker_insert(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
Definition tracking.cc:1235
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
MINLINE void copy_v2_v2(float r[2], const float a[2])
@ MARKER_TRACKED
@ MARKER_DISABLED
VecBase< float, 2 > float2
TEST_F(TrackingTest, BKE_tracking_marker_get)
MovieTrackingMarker * markers
uint8_t flag
Definition wm_window.cc:138