Fix #29688: Timecode is not used in tracking
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 27 Dec 2011 10:52:23 +0000 (10:52 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 27 Dec 2011 10:52:23 +0000 (10:52 +0000)
Use proper timecode flags sending to BKE_movieclip_get_ibuf_flag function,
so now frames for tracking would be full-resolution but calculated using
timecode defined in th interface,

source/blender/blenkernel/intern/tracking.c

index 04e8c3df0774c111c4c7f10062e9bcd147a73e7c..e3a9fdd9b7ff8973ba1b7c6e8ce0c0417b461fe0 100644 (file)
@@ -730,6 +730,7 @@ typedef struct TrackContext {
 typedef struct MovieTrackingContext {
        MovieClipUser user;
        MovieClip *clip;
+       int clip_flag;
 
        int first_time, frames;
 
@@ -830,7 +831,20 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
        }
 
        context->clip= clip;
+
+       /* store needed clip flags passing to get_buffer functions
+        * - MCLIP_USE_PROXY is needed to because timecode affects on movie clip
+        *   only in case Proxy/Timecode flag is set, so store this flag to use
+        *   timecodes properly but reset render size to SIZE_FULL so correct resolution
+        *   would be used for images
+        * - MCLIP_USE_PROXY_CUSTOM_DIR is needed because proxy/timecode files might
+        *   be stored in a different location
+        * ignore all the rest pssible flags for now */
+       context->clip_flag= clip->flag & (MCLIP_USE_PROXY|MCLIP_USE_PROXY_CUSTOM_DIR);
+
        context->user= *user;
+       context->user.render_size= 0;
+       context->user.render_flag= MCLIP_PROXY_RENDER_SIZE_FULL;
 
        if(!sequence)
                BLI_begin_threaded_malloc();
@@ -1044,7 +1058,7 @@ static ImBuf *get_frame_ibuf(MovieTrackingContext *context, int framenr)
 
        user.framenr= framenr;
 
-       ibuf= BKE_movieclip_get_ibuf_flag(context->clip, &user, 0);
+       ibuf= BKE_movieclip_get_ibuf_flag(context->clip, &user, context->clip_flag);
 
        return ibuf;
 }
@@ -1148,7 +1162,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, 0);
+       ibuf_new= BKE_movieclip_get_ibuf_flag(context->clip, &context->user, context->clip_flag);
        if(!ibuf_new)
                return 0;