[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58818] branches/soc-2011-tomato: Initial code layout for real plane tracker

Sergey Sharybin sergey.vfx at gmail.com
Fri Aug 2 07:45:59 CEST 2013


Revision: 58818
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58818
Author:   nazgul
Date:     2013-08-02 05:45:58 +0000 (Fri, 02 Aug 2013)
Log Message:
-----------
Initial code layout for real plane tracker

This commit includes:

- DNA structures layout. It's not completely finished
  yet, and at some point files could become broken,
  but we'll try to avoid this as much as we can.

- Basic RNA code layout for new data structures.
  Not completely finished in terms it's not possible
  to define plane tracks from Python just yet.

- Operator to define the plane.

- Deletion and selection operators are aware of planes.

- Plane marker's corners could be slided with mouse.

Still lots of thing to be done, but we need to commit
at some point so we could share the code work.

Modified Paths:
--------------
    branches/soc-2011-tomato/extern/libmv/libmv-capi.cc
    branches/soc-2011-tomato/extern/libmv/libmv-capi.h
    branches/soc-2011-tomato/extern/libmv/libmv-capi_stub.cc
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/bpath.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c
    branches/soc-2011-tomato/source/blender/blenloader/intern/writefile.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_graph_ops.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_intern.h
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_utils.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_select.c
    branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c

Modified: branches/soc-2011-tomato/extern/libmv/libmv-capi.cc
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv-capi.cc	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/extern/libmv/libmv-capi.cc	2013-08-02 05:45:58 UTC (rev 58818)
@@ -58,6 +58,8 @@
 #include "libmv/simple_pipeline/reconstruction_scale.h"
 #include "libmv/simple_pipeline/keyframe_selection.h"
 
+#include "libmv/multiview/homography.h"
+
 #ifdef _MSC_VER
 #  define snprintf _snprintf
 #endif
@@ -1090,4 +1092,22 @@
 	                                       warped_position_x, warped_position_y);
 }
 
+void libmv_homography2DFromCorrespondencesLinear(double (*x1)[2], double (*x2)[2], int num_points,
+                                                 double H[3][3], double expected_precision)
+{
+	libmv::Mat x1_mat, x2_mat;
+	libmv::Mat3 H_mat;
+
+	x1_mat.resize(2, num_points);
+	x2_mat.resize(2, num_points);
+
+	for (int i = 0; i < num_points; i++) {
+		x1_mat.col(i) = libmv::Vec2(x1[i][0], x1[i][1]);
+	}
+
+	libmv::Homography2DFromCorrespondencesLinear(x1_mat, x2_mat, &H_mat, expected_precision);
+
+	memcpy(H, H_mat.data(), 9 * sizeof(float));
+}
+
 #endif

Modified: branches/soc-2011-tomato/extern/libmv/libmv-capi.h
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv-capi.h	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/extern/libmv/libmv-capi.h	2013-08-02 05:45:58 UTC (rev 58818)
@@ -165,6 +165,9 @@
                                            double *warped_position_x,
                                            double *warped_position_y);
 
+void libmv_homography2DFromCorrespondencesLinear(double (*x1)[2], double (*x2)[2], int num_points,
+                                                 double H[3][3], double expected_precision);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/soc-2011-tomato/extern/libmv/libmv-capi_stub.cc
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv-capi_stub.cc	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/extern/libmv/libmv-capi_stub.cc	2013-08-02 05:45:58 UTC (rev 58818)
@@ -287,4 +287,13 @@
 	*warped_position_y = (double) num_samples_y * 0.5;
 }
 
+void libmv_homography2DFromCorrespondencesLinear(double (* /* x1 */)[2], double (* /* x2 */)[2], int /* num_points */,
+                                                 double H[3][3], double /* expected_precision */)
+{
+	memset(H, 0, sizeof(H));
+	N[0][0] = 1.0f;
+	N[1][1] = 1.0f;
+	N[02[2] = 1.0f;
+}
+
 #endif  // ifndef WITH_LIBMV

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py	2013-08-02 05:45:58 UTC (rev 58818)
@@ -335,6 +335,16 @@
         layout.operator("clip.join_tracks", text="Join")
 
 
+class CLIP_PT_tools_plane_tracking(CLIP_PT_tracking_panel, Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'TOOLS'
+    bl_label = "Plane Track"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator("clip.create_plane_track")
+
+
 class CLIP_PT_tools_solve(CLIP_PT_tracking_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'TOOLS'
@@ -603,6 +613,26 @@
             layout.label(text=label_text)
 
 
+class CLIP_PT_plane_track(CLIP_PT_tracking_panel, Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Plane Track"
+
+    def draw(self, context):
+        layout = self.layout
+
+        sc = context.space_data
+        clip = context.space_data.clip
+        active_track = clip.tracking.plane_tracks.active
+
+        if not active_track:
+            layout.active = False
+            layout.label(text="No active plane track")
+            return
+
+        layout.prop(active_track, "name")
+
+
 class CLIP_PT_track_settings(CLIP_PT_tracking_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'UI'

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h	2013-08-02 05:45:58 UTC (rev 58818)
@@ -38,6 +38,8 @@
 struct MovieReconstructContext;
 struct MovieTrackingTrack;
 struct MovieTrackingMarker;
+struct MovieTrackingPlaneTrack;
+struct MovieTrackingPlaneMarker;
 struct MovieTracking;
 struct MovieTrackingContext;
 struct MovieTrackingObject;
@@ -60,6 +62,7 @@
 void BKE_tracking_settings_init(struct MovieTracking *tracking);
 
 struct ListBase *BKE_tracking_get_active_tracks(struct MovieTracking *tracking);
+struct ListBase *BKE_tracking_get_active_plane_tracks(struct MovieTracking *tracking);
 struct MovieTrackingReconstruction *BKE_tracking_get_active_reconstruction(struct MovieTracking *tracking);
 
 /* matrices for constraints and drawing */
@@ -102,6 +105,7 @@
 /* selection */
 void BKE_tracking_track_select(struct ListBase *tracksbase, struct MovieTrackingTrack *track, int area, int extend);
 void BKE_tracking_track_deselect(struct MovieTrackingTrack *track, int area);
+void BKE_tracking_tracks_deselect_all(struct ListBase *tracksbase);
 
 /* **** Marker **** */
 struct MovieTrackingMarker *BKE_tracking_marker_insert(struct MovieTrackingTrack *track,
@@ -118,6 +122,30 @@
 
 void BKE_tracking_marker_get_subframe_position(struct MovieTrackingTrack *track, float framenr, float pos[2]);
 
+/* **** Plane Track **** */
+struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_add(struct MovieTracking *tracking, struct ListBase *plane_tracks_base,
+                                                             struct ListBase *tracks, int framenr);
+void BKE_tracking_plane_track_unique_name(struct ListBase *plane_tracks_base, struct MovieTrackingPlaneTrack *plane_track);
+void BKE_tracking_plane_track_free(struct MovieTrackingPlaneTrack *plane_track);
+
+bool BKE_tracking_plane_track_has_marker_at_frame(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+bool BKE_tracking_plane_track_has_enabled_marker_at_frame(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+
+struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_named(struct MovieTracking *tracking,
+                                                                   struct MovieTrackingObject *object,
+                                                                   const char *name);
+
+struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_active(struct MovieTracking *tracking);
+
+/* **** Plane Marker **** */
+struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_insert(struct MovieTrackingPlaneTrack *plane_track,
+                                                                  struct MovieTrackingPlaneMarker *plane_marker);
+void BKE_tracking_plane_marker_delete(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+
+struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_get(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_get_exact(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_ensure(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+
 /* **** Object **** */
 struct MovieTrackingObject *BKE_tracking_object_add(struct MovieTracking *tracking, const char *name);
 int BKE_tracking_object_delete(struct MovieTracking *tracking, struct MovieTrackingObject *object);
@@ -130,6 +158,7 @@
 struct MovieTrackingObject *BKE_tracking_object_get_camera(struct MovieTracking *tracking);
 
 struct ListBase *BKE_tracking_object_get_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object);
+struct ListBase *BKE_tracking_object_get_plane_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object);
 struct MovieTrackingReconstruction *BKE_tracking_object_get_reconstruction(struct MovieTracking *tracking,
                                                                            struct MovieTrackingObject *object);
 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/bpath.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/bpath.c	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/bpath.c	2013-08-02 05:45:58 UTC (rev 58818)
@@ -556,8 +556,10 @@
 				{
 					if (SEQ_HAS_PATH(seq)) {
 						if (ELEM(seq->type, SEQ_TYPE_MOVIE, SEQ_TYPE_SOUND_RAM)) {
-							rewrite_path_fixed_dirfile(seq->strip->dir, seq->strip->stripdata->name,
-							                           visit_cb, absbase, bpath_user_data);
+							if (seq->strip->stripdata) {
+								rewrite_path_fixed_dirfile(seq->strip->dir, seq->strip->stripdata->name,
+								                           visit_cb, absbase, bpath_user_data);
+							}
 						}
 						else if (seq->type == SEQ_TYPE_IMAGE) {
 							/* might want an option not to loop over all strips */

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2013-08-02 04:24:55 UTC (rev 58817)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2013-08-02 05:45:58 UTC (rev 58818)
@@ -103,6 +103,18 @@
 	BLI_freelistN(tracks);
 }
 
+/* Free the whole list of plane tracks, list's head and tail are set to NULL. */
+static void tracking_plane_tracks_free(ListBase *plane_tracks)
+{
+	MovieTrackingPlaneTrack *plane_track;
+
+	for (plane_track = plane_tracks->first; plane_track; plane_track = plane_track->next) {
+		BKE_tracking_plane_track_free(plane_track);
+	}
+
+	BLI_freelistN(plane_tracks);
+}
+
 /* Free reconstruction structures, only frees contents of a structure,
  * (if structure is allocated in heap, it shall be handled outside).
  *
@@ -122,6 +134,7 @@
 static void tracking_object_free(MovieTrackingObject *object)
 {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list