From 2f9047727224fa633647ff71e52938fe5993b9b0 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 1 Feb 2012 19:06:21 +0000 Subject: 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. --- source/blender/blenkernel/BKE_movieclip.h | 5 ++++- source/blender/blenkernel/intern/movieclip.c | 15 ++++++++------- source/blender/blenkernel/intern/tracking.c | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_movieclip.h b/source/blender/blenkernel/BKE_movieclip.h index 6f404bf5fee..eabbf459584 100644 --- a/source/blender/blenkernel/BKE_movieclip.h +++ b/source/blender/blenkernel/BKE_movieclip.h @@ -49,7 +49,7 @@ void BKE_movieclip_reload(struct MovieClip *clip); 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_get_cache_segments(struct MovieClip *clip, struct MovieClipUs 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) diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index bb8e420451f..c90faa7e0ca 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -631,7 +631,8 @@ static ImBuf *put_postprocessed_frame_to_cache(MovieClip *clip, MovieClipUser *u 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 @@ static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *u 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 @@ static ImBuf *movieclip_get_postprocessed_ibuf(MovieClip *clip, MovieClipUser *u 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 @@ void BKE_movieclip_build_proxy_frame(MovieClip *clip, int clip_flag, struct Movi 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; diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index 9bff5e3003d..e6032a50854 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -1226,7 +1226,7 @@ static ImBuf *get_frame_ibuf(MovieTrackingContext *context, int framenr) 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 @@ int BKE_tracking_next(MovieTrackingContext *context) 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; -- cgit v1.2.3