[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43829] trunk/blender/source/blender: Camera tracking: regression fixed after recent frame postprocessing refactor

Sergey Sharybin sergey.vfx at gmail.com
Wed Feb 1 20:06:28 CET 2012


Revision: 43829
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43829
Author:   nazgul
Date:     2012-02-01 19:06:21 +0000 (Wed, 01 Feb 2012)
Log Message:
-----------
Camera tracking: regression fixed after recent frame postprocessing refactor

No-proxied frames using for 2D tracking used to be putting to cache which lead
to extra memory usage which shouldn't happen.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_movieclip.h
    trunk/blender/source/blender/blenkernel/intern/movieclip.c
    trunk/blender/source/blender/blenkernel/intern/tracking.c
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c

Modified: trunk/blender/source/blender/blenkernel/BKE_movieclip.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_movieclip.h	2012-02-01 18:25:13 UTC (rev 43828)
+++ trunk/blender/source/blender/blenkernel/BKE_movieclip.h	2012-02-01 19:06:21 UTC (rev 43829)
@@ -49,7 +49,7 @@
 struct ImBuf *BKE_movieclip_get_ibuf(struct MovieClip *clip, struct MovieClipUser *user);
 struct ImBuf *BKE_movieclip_get_postprocessed_ibuf(struct MovieClip *clip, struct MovieClipUser *user, int postprocess_flag);
 struct ImBuf *BKE_movieclip_get_stable_ibuf(struct MovieClip *clip, struct MovieClipUser *user, float loc[2], float *scale, float *angle, int postprocess_flag);
-struct ImBuf *BKE_movieclip_get_ibuf_flag(struct MovieClip *clip, struct MovieClipUser *user, int flag);
+struct ImBuf *BKE_movieclip_get_ibuf_flag(struct MovieClip *clip, struct MovieClipUser *user, int flag, int cache_flag);
 void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height);
 void BKE_movieclip_aspect(struct MovieClip *clip, float *aspx, float *aspy);
 int BKE_movieclip_has_frame(struct MovieClip *clip, struct MovieClipUser *user);
@@ -64,6 +64,9 @@
 void BKE_movieclip_build_proxy_frame(struct MovieClip *clip, int clip_flag, struct MovieDistortion *distortion,
 			int cfra, int *build_sizes, int build_count, int undistorted);
 
+/* cacheing flags */
+#define MOVIECLIP_CACHE_SKIP        (1<<0)
+
 /* postprocessing flags */
 #define MOVIECLIP_DISABLE_RED       (1<<0)
 #define MOVIECLIP_DISABLE_GREEN     (1<<1)

Modified: trunk/blender/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/movieclip.c	2012-02-01 18:25:13 UTC (rev 43828)
+++ trunk/blender/source/blender/blenkernel/intern/movieclip.c	2012-02-01 19:06:21 UTC (rev 43829)
@@ -631,7 +631,8 @@
 	return postproc_ibuf;
 }
 
-static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *user, int flag, int postprocess_flag)
+static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *user, int flag,
+                                               int postprocess_flag, int cache_flag)
 {
 	ImBuf *ibuf= NULL;
 	int framenr= user->framenr, need_postprocess= 0;
@@ -664,7 +665,7 @@
 			ibuf= movieclip_load_movie_file(clip, user, framenr, flag);
 		}
 
-		if(ibuf)
+		if(ibuf && (cache_flag & MOVIECLIP_CACHE_SKIP) == 0)
 			put_imbuf_cache(clip, user, ibuf, flag);
 	}
 
@@ -687,17 +688,17 @@
 
 ImBuf *BKE_movieclip_get_ibuf(MovieClip *clip, MovieClipUser *user)
 {
-	return BKE_movieclip_get_ibuf_flag(clip, user, clip->flag);
+	return BKE_movieclip_get_ibuf_flag(clip, user, clip->flag, 0);
 }
 
-ImBuf *BKE_movieclip_get_ibuf_flag(MovieClip *clip, MovieClipUser *user, int flag)
+ImBuf *BKE_movieclip_get_ibuf_flag(MovieClip *clip, MovieClipUser *user, int flag, int cache_flag)
 {
-	return movieclip_get_postprocessed_ibuf(clip, user, flag, 0);
+	return movieclip_get_postprocessed_ibuf(clip, user, flag, 0, cache_flag);
 }
 
 ImBuf *BKE_movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *user, int postprocess_flag)
 {
-	return movieclip_get_postprocessed_ibuf(clip, user, clip->flag, postprocess_flag);
+	return movieclip_get_postprocessed_ibuf(clip, user, clip->flag, postprocess_flag, 0);
 }
 
 static ImBuf *get_stable_cached_frame(MovieClip *clip, MovieClipUser *user, int framenr)
@@ -1021,7 +1022,7 @@
 	user.render_flag= 0;
 	user.render_size= MCLIP_PROXY_RENDER_SIZE_FULL;
 
-	ibuf= BKE_movieclip_get_ibuf_flag(clip, &user, clip_flag);
+	ibuf= BKE_movieclip_get_ibuf_flag(clip, &user, clip_flag, MOVIECLIP_CACHE_SKIP);
 
 	if(ibuf) {
 		ImBuf *tmpibuf= ibuf;

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-02-01 18:25:13 UTC (rev 43828)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-02-01 19:06:21 UTC (rev 43829)
@@ -1226,7 +1226,7 @@
 
 	user.framenr= framenr;
 
-	ibuf= BKE_movieclip_get_ibuf_flag(context->clip, &user, context->clip_flag);
+	ibuf= BKE_movieclip_get_ibuf_flag(context->clip, &user, context->clip_flag, MOVIECLIP_CACHE_SKIP);
 
 	return ibuf;
 }
@@ -1330,7 +1330,7 @@
 	if(context->backwards) context->user.framenr--;
 	else context->user.framenr++;
 
-	ibuf_new= BKE_movieclip_get_ibuf_flag(context->clip, &context->user, context->clip_flag);
+	ibuf_new= BKE_movieclip_get_ibuf_flag(context->clip, &context->user, context->clip_flag, MOVIECLIP_CACHE_SKIP);
 	if(!ibuf_new)
 		return 0;
 

Modified: trunk/blender/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/tracking_ops.c	2012-02-01 18:25:13 UTC (rev 43828)
+++ trunk/blender/source/blender/editors/space_clip/tracking_ops.c	2012-02-01 19:06:21 UTC (rev 43829)
@@ -2757,7 +2757,7 @@
 	SpaceClip *sc= CTX_wm_space_clip(C);
 	MovieClip *clip= ED_space_clip(sc);
 	int clip_flag= clip->flag&MCLIP_TIMECODE_FLAGS;
-	ImBuf *ibuf= BKE_movieclip_get_ibuf_flag(clip, &sc->user, clip_flag);
+	ImBuf *ibuf= BKE_movieclip_get_ibuf_flag(clip, &sc->user, clip_flag, MOVIECLIP_CACHE_SKIP);
 	MovieTracking *tracking= &clip->tracking;
 	ListBase *tracksbase= BKE_tracking_get_tracks(tracking);
 	MovieTrackingTrack *track= tracksbase->first;




More information about the Bf-blender-cvs mailing list