[Bf-blender-cvs] [bf637984d17] master: Tracking: Refactor, generalize curve iteration API

Sergey Sharybin noreply at git.blender.org
Sun Jul 28 17:06:17 CEST 2019


Commit: bf637984d17f735d7bd86c843c11c2d362430056
Author: Sergey Sharybin
Date:   Sun Jul 28 15:55:02 2019 +0200
Branches: master
https://developer.blender.org/rBbf637984d17f735d7bd86c843c11c2d362430056

Tracking: Refactor, generalize curve iteration API

Make it generic enough to support iterating over reprojection error
in the same manner as coordinate speed.

===================================================================

M	source/blender/editors/space_clip/clip_graph_draw.c
M	source/blender/editors/space_clip/clip_graph_ops.c
M	source/blender/editors/space_clip/clip_intern.h
M	source/blender/editors/space_clip/clip_utils.c

===================================================================

diff --git a/source/blender/editors/space_clip/clip_graph_draw.c b/source/blender/editors/space_clip/clip_graph_draw.c
index ef5de1acee3..55012462527 100644
--- a/source/blender/editors/space_clip/clip_graph_draw.c
+++ b/source/blender/editors/space_clip/clip_graph_draw.c
@@ -57,7 +57,7 @@ typedef struct TrackMotionCurveUserData {
 static void tracking_segment_point_cb(void *userdata,
                                       MovieTrackingTrack *UNUSED(track),
                                       MovieTrackingMarker *UNUSED(marker),
-                                      int UNUSED(coord),
+                                      eClipCurveValueSource UNUSED(value_source),
                                       int scene_framenr,
                                       float val)
 {
@@ -68,13 +68,22 @@ static void tracking_segment_point_cb(void *userdata,
 
 static void tracking_segment_start_cb(void *userdata,
                                       MovieTrackingTrack *track,
-                                      int coord,
+                                      eClipCurveValueSource value_source,
                                       bool is_point)
 {
   TrackMotionCurveUserData *data = (TrackMotionCurveUserData *)userdata;
   float col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
 
-  col[coord] = 1.0f;
+  switch (value_source) {
+    case CLIP_VALUE_SOURCE_SPEED_X:
+      col[0] = 1.0f;
+      break;
+    case CLIP_VALUE_SOURCE_SPEED_Y:
+      col[1] = 1.0f;
+      break;
+    default:
+      return;
+  }
 
   if (track == data->act_track) {
     col[3] = 1.0f;
@@ -96,7 +105,8 @@ static void tracking_segment_start_cb(void *userdata,
   }
 }
 
-static void tracking_segment_end_cb(void *UNUSED(userdata), int UNUSED(coord))
+static void tracking_segment_end_cb(void *UNUSED(userdata),
+                                    eClipCurveValueSource UNUSED(value_source))
 {
   immEnd();
 }
@@ -104,7 +114,7 @@ static void tracking_segment_end_cb(void *UNUSED(userdata), int UNUSED(coord))
 static void tracking_segment_knot_cb(void *userdata,
                                      MovieTrackingTrack *track,
                                      MovieTrackingMarker *marker,
-                                     int coord,
+                                     eClipCurveValueSource value_source,
                                      int scene_framenr,
                                      float val)
 {
@@ -114,8 +124,11 @@ static void tracking_segment_knot_cb(void *userdata,
   if (track != data->act_track) {
     return;
   }
+  if (!ELEM(value_source, CLIP_VALUE_SOURCE_SPEED_X, CLIP_VALUE_SOURCE_SPEED_Y)) {
+    return;
+  }
 
-  sel_flag = coord == 0 ? MARKER_GRAPH_SEL_X : MARKER_GRAPH_SEL_Y;
+  sel_flag = value_source == CLIP_VALUE_SOURCE_SPEED_X ? MARKER_GRAPH_SEL_X : MARKER_GRAPH_SEL_Y;
   sel = (marker->flag & sel_flag) ? 1 : 0;
 
   if (sel == data->sel) {
@@ -196,11 +209,11 @@ typedef struct TrackErrorCurveUserData {
 static void tracking_error_segment_point_cb(void *userdata,
                                             MovieTrackingTrack *track,
                                             MovieTrackingMarker *marker,
-                                            int coord,
+                                            eClipCurveValueSource value_source,
                                             int scene_framenr,
                                             float UNUSED(value))
 {
-  if (coord == 1) {
+  if (value_source == CLIP_VALUE_SOURCE_SPEED_Y) {
     TrackErrorCurveUserData *data = (TrackErrorCurveUserData *)userdata;
     float reprojected_position[4], bundle_position[4], marker_position[2], delta[2];
     float reprojection_error;
@@ -238,10 +251,10 @@ static void tracking_error_segment_point_cb(void *userdata,
 
 static void tracking_error_segment_start_cb(void *userdata,
                                             MovieTrackingTrack *track,
-                                            int coord,
+                                            eClipCurveValueSource value_source,
                                             bool is_point)
 {
-  if (coord == 1) {
+  if (value_source == CLIP_VALUE_SOURCE_SPEED_Y) {
     TrackErrorCurveUserData *data = (TrackErrorCurveUserData *)userdata;
     float col[4] = {0.0f, 0.0f, 1.0f, 1.0f};
 
@@ -266,9 +279,10 @@ static void tracking_error_segment_start_cb(void *userdata,
   }
 }
 
-static void tracking_error_segment_end_cb(void *UNUSED(userdata), int coord)
+static void tracking_error_segment_end_cb(void *UNUSED(userdata),
+                                          eClipCurveValueSource value_source)
 {
-  if (coord == 1) {
+  if (value_source == CLIP_VALUE_SOURCE_SPEED_Y) {
     immEnd();
   }
 }
diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c
index 7f7fd40859a..1ebe56fccb6 100644
--- a/source/blender/editors/space_clip/clip_graph_ops.c
+++ b/source/blender/editors/space_clip/clip_graph_ops.c
@@ -93,13 +93,13 @@ static void toggle_selection_cb(void *userdata, MovieTrackingMarker *marker)
 /******************** mouse select operator ********************/
 
 typedef struct {
-  int coord;     /* coordinate index of found entity (0 = X-axis, 1 = Y-axis) */
+  eClipCurveValueSource value_source;
   bool has_prev; /* if there's valid coordinate of previous point of curve segment */
 
-  float min_dist_sq, /* minimal distance between mouse and currently found entity */
-      mouse_co[2],   /* mouse coordinate */
-      prev_co[2],    /* coordinate of previous point of segment */
-      min_co[2];     /* coordinate of entity with minimal distance */
+  float min_dist_sq; /* minimal distance between mouse and currently found entity */
+  float mouse_co[2]; /* mouse coordinate */
+  float prev_co[2];  /* coordinate of previous point of segment */
+  float min_co[2];   /* coordinate of entity with minimal distance */
 
   MovieTrackingTrack *track;   /* nearest found track */
   MovieTrackingMarker *marker; /* nearest found marker */
@@ -108,7 +108,7 @@ typedef struct {
 static void find_nearest_tracking_segment_cb(void *userdata,
                                              MovieTrackingTrack *track,
                                              MovieTrackingMarker *UNUSED(marker),
-                                             int coord,
+                                             eClipCurveValueSource value_source,
                                              int scene_framenr,
                                              float val)
 {
@@ -121,7 +121,7 @@ static void find_nearest_tracking_segment_cb(void *userdata,
     if (data->track == NULL || dist_sq < data->min_dist_sq) {
       data->track = track;
       data->min_dist_sq = dist_sq;
-      data->coord = coord;
+      data->value_source = value_source;
       copy_v2_v2(data->min_co, co);
     }
   }
@@ -130,7 +130,8 @@ static void find_nearest_tracking_segment_cb(void *userdata,
   copy_v2_v2(data->prev_co, co);
 }
 
-static void find_nearest_tracking_segment_end_cb(void *userdata, int UNUSED(coord))
+static void find_nearest_tracking_segment_end_cb(void *userdata,
+                                                 eClipCurveValueSource UNUSED(source_value))
 {
   MouseSelectUserData *data = userdata;
 
@@ -140,7 +141,7 @@ static void find_nearest_tracking_segment_end_cb(void *userdata, int UNUSED(coor
 static void find_nearest_tracking_knot_cb(void *userdata,
                                           MovieTrackingTrack *track,
                                           MovieTrackingMarker *marker,
-                                          int coord,
+                                          eClipCurveValueSource value_source,
                                           int scene_framenr,
                                           float val)
 {
@@ -154,7 +155,7 @@ static void find_nearest_tracking_knot_cb(void *userdata,
     data->track = track;
     data->marker = marker;
     data->min_dist_sq = dist_sq;
-    data->coord = coord;
+    data->value_source = value_source;
     copy_v2_v2(data->min_co, co);
   }
 }
@@ -199,7 +200,7 @@ static bool mouse_select_knot(bContext *C, float co[2], bool extend)
                                       toggle_selection_cb);
         }
 
-        if (userdata.coord == 0) {
+        if (userdata.value_source == CLIP_VALUE_SOURCE_SPEED_X) {
           if (extend && (userdata.marker->flag & MARKER_GRAPH_SEL_X) != 0) {
             userdata.marker->flag &= ~MARKER_GRAPH_SEL_X;
           }
@@ -207,7 +208,7 @@ static bool mouse_select_knot(bContext *C, float co[2], bool extend)
             userdata.marker->flag |= MARKER_GRAPH_SEL_X;
           }
         }
-        else {
+        else if (userdata.value_source == CLIP_VALUE_SOURCE_SPEED_Y) {
           if (extend && (userdata.marker->flag & MARKER_GRAPH_SEL_Y) != 0) {
             userdata.marker->flag &= ~MARKER_GRAPH_SEL_Y;
           }
@@ -356,16 +357,19 @@ typedef struct BoxSelectuserData {
 static void box_select_cb(void *userdata,
                           MovieTrackingTrack *UNUSED(track),
                           MovieTrackingMarker *marker,
-                          int coord,
+                          eClipCurveValueSource value_source,
                           int scene_framenr,
                           float val)
 {
   BoxSelectuserData *data = (BoxSelectuserData *)userdata;
+  if (!ELEM(value_source, CLIP_VALUE_SOURCE_SPEED_X, CLIP_VALUE_SOURCE_SPEED_Y)) {
+    return;
+  }
 
   if (BLI_rctf_isect_pt(&data->rect, scene_framenr, val)) {
     int flag = 0;
 
-    if (coord == 0) {
+    if (value_source == CLIP_VALUE_SOURCE_SPEED_X) {
       flag = MARKER_GRAPH_SEL_X;
     }
     else {
@@ -591,7 +595,7 @@ typedef struct {
 static void view_all_cb(void *userdata,
                         MovieTrackingTrack *UNUSED(track),
                         MovieTrackingMarker *UNUSED(marker),
-                        int UNUSED(coord),
+                        eClipCurveValueSource UNUSED(value_source),
                         int UNUSED(scene_framenr),
                         float val)
 {
diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_in

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list