Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2020-12-28 19:28:28 +0300
committerSergey Sharybin <sergey@blender.org>2021-01-18 18:38:40 +0300
commit0ac8fec3be4af8d2c079142bb9638d5f1e3097ed (patch)
tree62d28a8a5de93725ffad6b1af976151794844094 /source/blender/blenkernel/intern/tracking_test.cc
parent0ca0d3366d4c79949914e229858f0a5477b9e6ec (diff)
Tracking: Add interpolated accessor for markers
Allows to get marker position interpolated through out a gap. Currently unused, but is covered with test. Aimed to be used for track average operator.
Diffstat (limited to 'source/blender/blenkernel/intern/tracking_test.cc')
-rw-r--r--source/blender/blenkernel/intern/tracking_test.cc114
1 files changed, 113 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/tracking_test.cc b/source/blender/blenkernel/intern/tracking_test.cc
index 6c3cf89a03f..2877d8db358 100644
--- a/source/blender/blenkernel/intern/tracking_test.cc
+++ b/source/blender/blenkernel/intern/tracking_test.cc
@@ -5,15 +5,23 @@
#include "DNA_tracking_types.h"
#include "BKE_tracking.h"
+#include "BLI_float2.hh"
+
+namespace blender {
namespace {
class TrackingTest : public ::testing::Test {
protected:
- MovieTrackingMarker *addMarkerToTrack(MovieTrackingTrack *track, int frame_number)
+ MovieTrackingMarker *addMarkerToTrack(MovieTrackingTrack *track,
+ int frame_number,
+ const float2 &position = float2(0.0f, 0.0f),
+ int flag = 0)
{
MovieTrackingMarker marker = {{0.0f}};
+ copy_v2_v2(marker.pos, position);
marker.framenr = frame_number;
+ marker.flag = flag;
return BKE_tracking_marker_insert(track, &marker);
}
};
@@ -96,3 +104,107 @@ TEST_F(TrackingTest, BKE_tracking_marker_get_exact)
BKE_tracking_track_free(&track);
}
+
+TEST_F(TrackingTest, BKE_tracking_marker_get_interpolated)
+{
+ /* Simple case, no disabled markers in a way. */
+ {
+ MovieTrackingTrack track = {nullptr};
+
+ addMarkerToTrack(&track, 1, float2(1.0f, 5.0f));
+ addMarkerToTrack(&track, 10, float2(2.0f, 1.0f));
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 1, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 1);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.0f, 5.0f), 1e-6f);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 10, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 10);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(2.0f, 1.0f), 1e-6f);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 4, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 4);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.3333333f, 3.6666666f), 1e-6f);
+ }
+
+ BKE_tracking_track_free(&track);
+ }
+
+ /* More comprehensive test, which resembles real life trackign scenario better. */
+ {
+ MovieTrackingTrack track = {nullptr};
+
+ addMarkerToTrack(&track, 1, float2(1.0f, 5.0f));
+ addMarkerToTrack(&track, 2, float2(0.0f, 0.0f), MARKER_DISABLED);
+ addMarkerToTrack(&track, 9, float2(0.0f, 0.0f), MARKER_DISABLED);
+ addMarkerToTrack(&track, 10, float2(2.0f, 1.0f));
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 1, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 1);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.0f, 5.0f), 1e-6f);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 10, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 10);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(2.0f, 1.0f), 1e-6f);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 4, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 4);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.3333333f, 3.6666666f), 1e-6f);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 9, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.framenr, 9);
+ EXPECT_V2_NEAR(interpolated_marker.pos, float2(1.888888f, 1.4444444f), 1e-6f);
+ }
+
+ BKE_tracking_track_free(&track);
+ }
+
+ /* Tracked/keyframed flag check. */
+ {
+ MovieTrackingTrack track = {nullptr};
+
+ addMarkerToTrack(&track, 1, float2(1.0f, 5.0f), MARKER_TRACKED);
+ addMarkerToTrack(&track, 10, float2(2.0f, 1.0f), MARKER_TRACKED);
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 1, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.flag, MARKER_TRACKED);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 10, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.flag, MARKER_TRACKED);
+ }
+
+ {
+ MovieTrackingMarker interpolated_marker;
+ EXPECT_TRUE(BKE_tracking_marker_get_interpolated(&track, 4, &interpolated_marker));
+ EXPECT_EQ(interpolated_marker.flag, 0);
+ }
+
+ BKE_tracking_track_free(&track);
+ }
+}
+
+} // namespace blender