Revision: 40914
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40914
Author:   nazgul
Date:     2011-10-10 15:29:39 +0000 (Mon, 10 Oct 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Fixed movie clip cache drawing -- it used to draw both
  distorted and undistorted cached frames.
- Undistort markers position in clip editor when using
  undistorted rendering.
  Can be noticeable slower when displaying paths.
- Display proper image in track preview widget when
  using undistorted rendering.
- Do not mark scoped as dirty when not in tracking mode.

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_moviecache.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/moviecache.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c
    branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_editor.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_space.c

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_moviecache.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_moviecache.h 
2011-10-10 15:29:31 UTC (rev 40913)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_moviecache.h 
2011-10-10 15:29:39 UTC (rev 40914)
@@ -44,7 +44,7 @@
 struct ImBuf;
 struct MovieCache;
 
-typedef void (*MovieCacheGetKeyDataFP) (void *userkey, int *framenr, int 
*proxy);
+typedef void (*MovieCacheGetKeyDataFP) (void *userkey, int *framenr, int 
*proxy, int *render_flags);
 
 void BKE_moviecache_init(void);
 void BKE_moviecache_destruct(void);
@@ -53,6 +53,6 @@
 void BKE_moviecache_put(struct MovieCache *cache, void *userkey, struct ImBuf 
*ibuf);
 struct ImBuf* BKE_moviecache_get(struct MovieCache *cache, void *userkey);
 void BKE_moviecache_free(struct MovieCache *cache);
-void BKE_moviecache_get_cache_segments(struct MovieCache *cache, int proxy, 
int *totseg_r, int **points_r);
+void BKE_moviecache_get_cache_segments(struct MovieCache *cache, int proxy, 
int render_flags, int *totseg_r, int **points_r);
 
 #endif

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/moviecache.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/moviecache.c      
2011-10-10 15:29:31 UTC (rev 40913)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/moviecache.c      
2011-10-10 15:29:39 UTC (rev 40914)
@@ -58,7 +58,7 @@
        int keysize;
        unsigned long curtime;
 
-       int totseg, *points, points_proxy;      /* for visual statistics 
optimization */
+       int totseg, *points, proxy, render_flags;       /* for visual 
statistics optimization */
        int pad;
 } MovieCache;
 
@@ -212,7 +212,7 @@
        cache->hashfp= hashfp;
        cache->cmpfp= cmpfp;
        cache->getdatafp= getdatafp;
-       cache->points_proxy= -1;
+       cache->proxy= -1;
 
        return cache;
 }
@@ -294,7 +294,7 @@
 }
 
 /* get segments of cached frames. useful for debugging cache policies */
-void BKE_moviecache_get_cache_segments(MovieCache *cache, int proxy, int 
*totseg_r, int **points_r)
+void BKE_moviecache_get_cache_segments(MovieCache *cache, int proxy, int 
render_flags, int *totseg_r, int **points_r)
 {
        *totseg_r= 0;
        *points_r= NULL;
@@ -302,7 +302,7 @@
        if(!cache->getdatafp)
                return;
 
-       if(cache->points_proxy!=proxy) {
+       if(cache->proxy!=proxy || cache->render_flags!=render_flags) {
                if(cache->points)
                        MEM_freeN(cache->points);
 
@@ -323,12 +323,12 @@
                while(!BLI_ghashIterator_isDone(iter)) {
                        MovieCacheKey *key= BLI_ghashIterator_getKey(iter);
                        MovieCacheItem *item= BLI_ghashIterator_getValue(iter);
-                       int framenr, curproxy;
+                       int framenr, curproxy, curflags;
 
                        if(item->ibuf) {
-                               cache->getdatafp(key->userkey, &framenr, 
&curproxy);
+                               cache->getdatafp(key->userkey, &framenr, 
&curproxy, &curflags);
 
-                               if(curproxy==proxy)
+                               if(curproxy==proxy && curflags==render_flags)
                                        frames[a++]= framenr;
                        }
 
@@ -374,6 +374,8 @@
 
                        cache->totseg= totseg;
                        cache->points= points;
+                       cache->proxy= proxy;
+                       cache->render_flags= render_flags;
                }
        }
 }

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c       
2011-10-10 15:29:31 UTC (rev 40913)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c       
2011-10-10 15:29:39 UTC (rev 40914)
@@ -284,12 +284,13 @@
        short render_flag;
 } MovieClipImBufCacheKey;
 
-static void moviecache_keydata(void *userkey, int *framenr, int *proxy)
+static void moviecache_keydata(void *userkey, int *framenr, int *proxy, int 
*render_flags)
 {
        MovieClipImBufCacheKey *key= (MovieClipImBufCacheKey*)userkey;
 
        *framenr= key->framenr;
        *proxy= key->proxy;
+       *render_flags= key->render_flag;
 }
 
 static unsigned int moviecache_hashhash(const void *keyv)
@@ -610,7 +611,6 @@
 
        if(ibuf) {
                clip->lastframe= framenr;
-
                real_ibuf_size(clip, user, ibuf, &clip->lastsize[0], 
&clip->lastsize[1]);
 
                /* put undistorted frame to cache */
@@ -637,7 +637,7 @@
        BLI_lock_thread(LOCK_MOVIECLIP);
 
        /* try to obtain cached undistorted image first */
-       if(need_undistorted_cache(user, clip->flag)) {
+       if(need_undistorted_cache(user, flag)) {
                ibuf= get_undistorted_cache(clip, user);
                if(!ibuf)
                        cache_undistorted= 1;
@@ -792,7 +792,7 @@
        if(clip->cache) {
                int proxy= rendersize_to_proxy(user, clip->flag);
 
-               BKE_moviecache_get_cache_segments(clip->cache->moviecache, 
proxy, totseg_r, points_r);
+               BKE_moviecache_get_cache_segments(clip->cache->moviecache, 
proxy, user->render_flag, totseg_r, points_r);
        }
 }
 
@@ -889,9 +889,25 @@
 
                                if(ibuf && ibuf->rect) {
                                        ImBuf *tmpibuf;
+                                       MovieTrackingMarker undist_marker= 
*marker;
 
-                                       tmpibuf= 
BKE_tracking_acquire_pattern_imbuf(ibuf, track, marker, 1, 1, 
scopes->track_pos, NULL);
+                                       
if(user->render_flag&MCLIP_PROXY_RENDER_UNDISTORT) {
+                                               int width, height;
+                                               float aspy= 
1.f/clip->tracking.camera.pixel_aspect;;
 
+                                               
BKE_movieclip_acquire_size(clip, user, &width, &height);
+
+                                               undist_marker.pos[0]*= width;
+                                               undist_marker.pos[1]*= 
height*aspy;
+
+                                               
BKE_tracking_invert_intrinsics(&clip->tracking, undist_marker.pos, 
undist_marker.pos);
+
+                                               undist_marker.pos[0]/= width;
+                                               undist_marker.pos[1]/= 
height*aspy;
+                                       }
+
+                                       tmpibuf= 
BKE_tracking_acquire_pattern_imbuf(ibuf, track, &undist_marker, 1, 1, 
scopes->track_pos, NULL);
+
                                        if(tmpibuf->rect_float)
                                                IMB_rect_from_float(tmpibuf);
 

Modified: branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h   
2011-10-10 15:29:31 UTC (rev 40913)
+++ branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h   
2011-10-10 15:29:39 UTC (rev 40914)
@@ -56,6 +56,7 @@
 void ED_clip_update_frame(const struct Main *mainp, int cfra);
 void ED_clip_view_selection(struct SpaceClip *sc, struct ARegion *ar, int fit);
 
+void ED_clip_point_undistorted_pos(SpaceClip *sc, float co[2], float nco[2]);
 void ED_clip_point_stable_pos(struct bContext *C, float x, float y, float *xr, 
float *yr);
 void ED_clip_mouse_pos(struct bContext *C, struct wmEvent *event, float co[2]);
 

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c      
2011-10-10 15:29:31 UTC (rev 40913)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c      
2011-10-10 15:29:39 UTC (rev 40914)
@@ -274,6 +274,7 @@
 
                if(marker->framenr==i) {
                        add_v2_v2v2(path[--a], marker->pos, track->offset);
+                       ED_clip_point_undistorted_pos(sc, path[a], path[a]);
 
                        if(marker->framenr==sc->user.framenr)
                                curindex= a;
@@ -296,6 +297,7 @@
                                curindex= b;
 
                        add_v2_v2v2(path[b++], marker->pos, track->offset);
+                       ED_clip_point_undistorted_pos(sc, path[b-1], path[b-1]);
                } else
                        break;
 
@@ -351,7 +353,7 @@
        glPointSize(1.0f);
 }
 
-static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker, int width, int height)
+static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker, float marker_pos[2], int width, int height)
 {
        int tiny= sc->flag&SC_SHOW_TINY_MARKER;
        int show_search= 0;
@@ -369,7 +371,9 @@
                BLI_init_rctf(&r, track->pat_min[0], track->pat_max[0], 
track->pat_min[1], track->pat_max[1]);
                add_v2_v2v2(pos, marker->pos, track->offset);
 
-               if(BLI_in_rctf(&r, pos[0]-marker->pos[0], 
pos[1]-marker->pos[1])) {
+               ED_clip_point_undistorted_pos(sc, pos, pos);
+
+               if(BLI_in_rctf(&r, pos[0]-marker_pos[0], pos[1]-marker_pos[1])) 
{
                        if(tiny) glPointSize(3.0f);
                        else glPointSize(4.0f);
                        glBegin(GL_POINTS);
@@ -397,7 +401,7 @@
 
        /* pattern and search outline */
        glPushMatrix();
-       glTranslatef(marker->pos[0], marker->pos[1], 0);
+       glTranslatef(marker_pos[0], marker_pos[1], 0);
 
        if(!tiny) glLineWidth(3.0f);
 
@@ -439,7 +443,7 @@
        }
 }
 
-static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker, int width, int height, int act, int sel)
+static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker, float marker_pos[2], int width, int height, int 
act, int sel)
 {
        int tiny= sc->flag&SC_SHOW_TINY_MARKER;
        int show_search= 0;
@@ -464,12 +468,11 @@
                        else glColor3fv(col);
                }
 
-               add_v2_v2v2(pos, marker->pos, track->offset);
-
                BLI_init_rctf(&r, track->pat_min[0], track->pat_max[0], 
track->pat_min[1], track->pat_max[1]);
                add_v2_v2v2(pos, marker->pos, track->offset);
+               ED_clip_point_undistorted_pos(sc, pos, pos);
 
-               if(BLI_in_rctf(&r, pos[0]-marker->pos[0], 
pos[1]-marker->pos[1])) {
+               if(BLI_in_rctf(&r, pos[0]-marker_pos[0], pos[1]-marker_pos[1])) 
{
                        if(!tiny) glPointSize(2.0f);
                        glBegin(GL_POINTS);
                                glVertex2f(pos[0], pos[1]);
@@ -498,7 +501,7 @@
 
                        glBegin(GL_LINES);
                                glVertex2fv(pos);
-                               glVertex2fv(marker->pos);
+                               glVertex2fv(marker_pos);
                        glEnd();
 
                        glDisable(GL_COLOR_LOGIC_OP);
@@ -508,7 +511,7 @@
 
        /* pattern */
        glPushMatrix();
-       glTranslatef(marker->pos[0], marker->pos[1], 0);
+       glTranslatef(marker_pos[0], marker_pos[1], 0);
 
        if(tiny) {
                glLineStipple(3, 0xaaaa);
@@ -569,7 +572,8 @@
        glPopMatrix();
 }
 
-static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker, int outline, int sel, int act, int width, int 
height)
+static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker,
+                       float marker_pos[2], int outline, int sel, int act, int 
width, int height)
 {
        float x, y, dx, dy, patdx, patdy, searchdx, searchdy, tdx, tdy;
        int tiny= sc->flag&SC_SHOW_TINY_MARKER;
@@ -589,7 +593,7 @@
        }
 
        glPushMatrix();
-       glTranslatef(marker->pos[0], marker->pos[1], 0);
+       glTranslatef(marker_pos[0], marker_pos[1], 0);
 
        dx= 6.0f/width/sc->zoom;
        dy= 6.0f/height/sc->zoom;
@@ -697,7 +701,7 @@
                glLineWidth(1.0f);
 }
 
-static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, 
MovieTrackingMarker *marker, int act,

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to