[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46249] trunk/blender: Camera tracking: switch dopesheet information to lazy calculation

Sergey Sharybin sergey.vfx at gmail.com
Fri May 4 01:15:01 CEST 2012


Revision: 46249
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46249
Author:   nazgul
Date:     2012-05-03 23:15:01 +0000 (Thu, 03 May 2012)
Log Message:
-----------
Camera tracking: switch dopesheet information to lazy calculation

All operators which changes tracking data now just tags dopsheet as outdated,
actual re-calculaiton of happens only when this information is actually needed
(like on dopesheet draw).

This makes things a bit faster when there's no dopesheet visible in current
screen and also makes it much easier to update dopesheet using dependency
graph.

Also renamed dopesheet_sort_order to dopesheet_sort_method in rna and internal
stuff which makes much more sense and also correlated with naming in
file browser.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/source/blender/blenkernel/BKE_tracking.h
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/tracking.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/include/ED_clip.h
    trunk/blender/source/blender/editors/space_clip/clip_editor.c
    trunk/blender/source/blender/editors/space_clip/clip_utils.c
    trunk/blender/source/blender/editors/space_clip/space_clip.c
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c
    trunk/blender/source/blender/makesdna/DNA_tracking_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-05-03 23:15:01 UTC (rev 46249)
@@ -86,7 +86,7 @@
 
             if sc.view == 'DOPESHEET':
                 layout.label(text="Sort by:")
-                layout.prop(sc, "dopesheet_sort_order", text="")
+                layout.prop(sc, "dopesheet_sort_method", text="")
                 layout.prop(sc, "invert_dopesheet_sort", text="Invert")
 
         layout.template_running_jobs()

Modified: trunk/blender/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_tracking.h	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/blenkernel/BKE_tracking.h	2012-05-03 23:15:01 UTC (rev 46249)
@@ -165,8 +165,8 @@
 void BKE_tracking_deselect_track(struct MovieTrackingTrack *track, int area);
 
 /* Dopesheet */
-void BKE_tracking_update_dopesheet(struct MovieTracking *tracking);
-void BKE_tracking_dopesheet_sort(struct MovieTracking *tracking, int sort_order, int inverse);
+void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking);
+void BKE_tracking_dopesheet_update(struct MovieTracking *tracking, int sort_method, int inverse);
 
 #define TRACK_SELECTED(track)				((track)->flag&SELECT || (track)->pat_flag&SELECT || (track)->search_flag&SELECT)
 

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2012-05-03 23:15:01 UTC (rev 46249)
@@ -72,6 +72,7 @@
 #include "BKE_pointcache.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
+#include "BKE_tracking.h"
 #include "BKE_utildefines.h"
 
 #include "depsgraph_private.h"
@@ -2580,6 +2581,10 @@
 		}
 
 		if (idtype == ID_MC) {
+			MovieClip *clip = (MovieClip *) id;
+
+			BKE_tracking_dopesheet_tag_update(&clip->tracking);
+
 			for (obt=bmain->object.first; obt; obt= obt->id.next) {
 				bConstraint *con;
 				for (con = obt->constraints.first; con; con=con->next) {

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-05-03 23:15:01 UTC (rev 46249)
@@ -1376,7 +1376,7 @@
 
 	context->sync_frame = newframe;
 
-	BKE_tracking_update_dopesheet(tracking);
+	tracking->dopesheet.ok = FALSE;
 }
 
 void BKE_tracking_sync_user(MovieClipUser *user, MovieTrackingContext *context)
@@ -3196,13 +3196,59 @@
 	}
 }
 
-void BKE_tracking_update_dopesheet(MovieTracking *tracking)
+static void  tracking_dopesheet_sort(MovieTracking *tracking, int sort_method, int inverse)
 {
+	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
+
+	if (dopesheet->sort_method == sort_method && dopesheet->sort_inverse == inverse)
+		return;
+
+	if (inverse) {
+		if (sort_method == TRACK_SORT_NAME) {
+			BLI_sortlist(&dopesheet->channels, channels_alpha_inverse_sort);
+		}
+		else if (sort_method == TRACK_SORT_LONGEST) {
+			BLI_sortlist(&dopesheet->channels, channels_longest_segment_inverse_sort);
+		}
+		else if (sort_method == TRACK_SORT_TOTAL) {
+			BLI_sortlist(&dopesheet->channels, channels_total_track_inverse_sort);
+		}
+	}
+	else {
+		if (sort_method == TRACK_SORT_NAME) {
+			BLI_sortlist(&dopesheet->channels, channels_alpha_sort);
+		}
+		else if (sort_method == TRACK_SORT_LONGEST) {
+			BLI_sortlist(&dopesheet->channels, channels_longest_segment_sort);
+		}
+		else if (sort_method == TRACK_SORT_TOTAL) {
+			BLI_sortlist(&dopesheet->channels, channels_total_track_sort);
+		}
+	}
+
+	dopesheet->sort_method = sort_method;
+	dopesheet->sort_inverse = inverse;
+}
+
+void BKE_tracking_dopesheet_tag_update(MovieTracking *tracking)
+{
+	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
+
+	dopesheet->ok = FALSE;
+}
+
+void BKE_tracking_dopesheet_update(MovieTracking *tracking, int sort_method, int inverse)
+{
 	MovieTrackingObject *object = BKE_tracking_active_object(tracking);
 	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
 	MovieTrackingTrack *track;
 	ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object);
 
+	if (dopesheet->ok) {
+		tracking_dopesheet_sort(tracking, sort_method, inverse);
+		return;
+	}
+
 	tracking_dopesheet_free(dopesheet);
 
 	for (track = tracksbase->first; track; track = track->next) {
@@ -3219,40 +3265,9 @@
 		}
 	}
 
-	dopesheet->sort_order = TRACK_SORT_NONE;
-	dopesheet->sort_inverse = -1;
-}
+	dopesheet->sort_method = TRACK_SORT_NONE;
 
-void BKE_tracking_dopesheet_sort(MovieTracking *tracking, int sort_order, int inverse)
-{
-	MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
+	tracking_dopesheet_sort(tracking, sort_method, inverse);
 
-	if (dopesheet->sort_order == sort_order && dopesheet->sort_inverse == inverse)
-		return;
-
-	if (inverse) {
-		if (sort_order == TRACK_SORT_NAME) {
-			BLI_sortlist(&dopesheet->channels, channels_alpha_inverse_sort);
-		}
-		else if (sort_order == TRACK_SORT_LONGEST) {
-			BLI_sortlist(&dopesheet->channels, channels_longest_segment_inverse_sort);
-		}
-		else if (sort_order == TRACK_SORT_TOTAL) {
-			BLI_sortlist(&dopesheet->channels, channels_total_track_inverse_sort);
-		}
-	}
-	else {
-		if (sort_order == TRACK_SORT_NAME) {
-			BLI_sortlist(&dopesheet->channels, channels_alpha_sort);
-		}
-		else if (sort_order == TRACK_SORT_LONGEST) {
-			BLI_sortlist(&dopesheet->channels, channels_longest_segment_sort);
-		}
-		else if (sort_order == TRACK_SORT_TOTAL) {
-			BLI_sortlist(&dopesheet->channels, channels_total_track_sort);
-		}
-	}
-
-	dopesheet->sort_order = sort_order;
-	dopesheet->sort_inverse = inverse;
+	dopesheet->ok = TRUE;
 }

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-05-03 23:15:01 UTC (rev 46249)
@@ -6170,21 +6170,6 @@
 	}
 }
 
-static void direct_link_movieDopesheet(FileData *fd, MovieTrackingDopesheet *dopesheet)
-{
-	MovieTrackingDopesheetChannel *channel;
-
-	link_list(fd, &dopesheet->channels);
-
-	channel = dopesheet->channels.first;
-	while (channel) {
-		channel->track = newdataadr(fd, channel->track);
-		channel->segments = newdataadr(fd, channel->segments);
-
-		channel = channel->next;
-	}
-}
-
 static void direct_link_movieclip(FileData *fd, MovieClip *clip)
 {
 	MovieTracking *tracking= &clip->tracking;
@@ -6211,6 +6196,9 @@
 	clip->tracking.stabilization.scaleibuf= NULL;
 	clip->tracking.stabilization.rot_track= newdataadr(fd, clip->tracking.stabilization.rot_track);
 
+	clip->tracking.dopesheet.ok = 0;
+	clip->tracking.dopesheet.channels.first = clip->tracking.dopesheet.channels.last = NULL;
+
 	link_list(fd, &tracking->objects);
 
 	object= tracking->objects.first;
@@ -6220,8 +6208,6 @@
 
 		object= object->next;
 	}
-
-	direct_link_movieDopesheet(fd, &clip->tracking.dopesheet);
 }
 
 static void lib_link_movieclip(FileData *fd, Main *main)

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2012-05-03 23:15:01 UTC (rev 46249)
@@ -2679,19 +2679,6 @@
 	}
 }
 
-static void write_movieDopesheet(WriteData *wd, MovieTrackingDopesheet *dopesheet)
-{
-	MovieTrackingDopesheetChannel *channel;
-
-	channel = dopesheet->channels.first;
-	while (channel) {
-		writestruct(wd, DATA, "MovieTrackingDopesheetChannel", 1, channel);
-		writedata(wd, DATA, 2 * channel->tot_segment * sizeof(int), channel->segments);
-
-		channel = channel->next;
-	}
-}
-
 static void write_movieReconstruction(WriteData *wd, MovieTrackingReconstruction *reconstruction)
 {
 	if (reconstruction->camnr)
@@ -2724,8 +2711,6 @@
 
 				object= object->next;
 			}
-
-			write_movieDopesheet(wd, &tracking->dopesheet);
 		}
 
 		clip= clip->id.next;

Modified: trunk/blender/source/blender/editors/include/ED_clip.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_clip.h	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/editors/include/ED_clip.h	2012-05-03 23:15:01 UTC (rev 46249)
@@ -72,8 +72,6 @@
 
 int ED_space_clip_show_trackedit(struct SpaceClip *sc);
 
-void ED_space_clip_update_dopesheet(struct SpaceClip *sc);
-
 /* clip_ops.c */
 void ED_operatormacros_clip(void);
 

Modified: trunk/blender/source/blender/editors/space_clip/clip_editor.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_editor.c	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/editors/space_clip/clip_editor.c	2012-05-03 23:15:01 UTC (rev 46249)
@@ -552,11 +552,3 @@
 
 	return FALSE;
 }
-
-void ED_space_clip_update_dopesheet(SpaceClip *sc)
-{
-	MovieClip *clip = sc->clip;
-	MovieTracking *tracking = &clip->tracking;
-
-	BKE_tracking_update_dopesheet(tracking);
-}

Modified: trunk/blender/source/blender/editors/space_clip/clip_utils.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_utils.c	2012-05-03 22:47:00 UTC (rev 46248)
+++ trunk/blender/source/blender/editors/space_clip/clip_utils.c	2012-05-03 23:15:01 UTC (rev 46249)
@@ -194,11 +194,11 @@
 
 	if (update_stab) {
 		tracking->stabilization.ok = FALSE;
-
-		DAG_id_tag_update(&clip->id, 0);
 		WM_event_add_notifier(C, NC_MOVIECLIP|ND_DISPLAY, clip);
 	}
 
+	DAG_id_tag_update(&clip->id, 0);
+
 	if (has_bundle)
 		WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, NULL);
 }

Modified: trunk/blender/source/blender/editors/space_clip/space_clip.c
===================================================================

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list