Revision: 38950
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38950
Author:   nazgul
Date:     2011-08-02 18:25:18 +0000 (Tue, 02 Aug 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Fixed some silly things ni DNA design. Now all
  reconstruction data is stored in Tracking->Reconstruction.
  Please, re-solve your cameras -- reconstruction data
  wouldn't be read from files saved in blender below this
  commit.
- RNA accessors for reconstruction data.
- Store average reconstruction error in new reconstruction
  structure and show it in clip editor header after
  reconstruction.
- Highlight failed to reconstruct frames with red in cache line.
- Added "group" "Failed Tracks" in Select Grouped operator,
  Meant to be used for selecting tracks bundles from which
  failed to to be solved.
- Hotkey to delete marker: Shift-X.
- Jump to next/prev failed frame operator. Hotkeys are
  Ctrl-Shift-Left/Right Arrow.

Modified Paths:
--------------
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c
    branches/soc-2011-tomato/source/blender/blenloader/intern/writefile.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py        
2011-08-02 18:16:48 UTC (rev 38949)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py        
2011-08-02 18:25:18 UTC (rev 38950)
@@ -113,7 +113,13 @@
         layout.template_ID(sc, "clip")
         layout.template_running_jobs()
 
+        if clip:
+            r = clip.tracking.reconstruction
 
+            if r.is_reconstructed:
+                layout.label(text="Average solve error: %.4f"  % 
(r.average_error))
+
+
 class CLIP_PT_tools(bpy.types.Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'TOOLS'
@@ -577,6 +583,9 @@
         op = layout.operator("clip.select_grouped", text="Select Disabled")
         op.group = 'DISABLED'
 
+        op = layout.operator("clip.select_grouped", text="Select Failed")
+        op.group = 'FAILED'
+
         op = layout.operator("clip.select_grouped", text="Select by Color")
         op.group = 'COLOR'
 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h   
2011-08-02 18:16:48 UTC (rev 38949)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h   
2011-08-02 18:25:18 UTC (rev 38950)
@@ -71,7 +71,7 @@
 void BKE_tracking_sync_user(struct MovieClipUser *user, struct 
MovieTrackingContext *context);
 int BKE_tracking_next(struct MovieTrackingContext *context);
 
-float BKE_tracking_solve_reconstruction(struct MovieClip *clip);
+float BKE_tracking_solve_reconstruction(struct MovieTracking *tracking, int 
width, int height);
 
 void BKE_track_unique_name(struct MovieTracking *tracking, struct 
MovieTrackingTrack *track);
 struct MovieTrackingTrack *BKE_find_track_by_name(struct MovieTracking 
*tracking, const char *name);

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c        
2011-08-02 18:16:48 UTC (rev 38949)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c        
2011-08-02 18:25:18 UTC (rev 38950)
@@ -448,8 +448,8 @@
 
        BLI_freelistN(&tracking->tracks);
 
-       if(tracking->camera.reconstructed)
-               MEM_freeN(tracking->camera.reconstructed);
+       if(tracking->reconstruction.cameras)
+               MEM_freeN(tracking->reconstruction.cameras);
 
        if(tracking->stabilization.scaleibuf)
                IMB_freeImBuf(tracking->stabilization.scaleibuf);
@@ -871,17 +871,13 @@
 }
 
 #if WITH_LIBMV
-static struct libmv_Tracks *create_libmv_tracks(MovieClip *clip)
+static struct libmv_Tracks *create_libmv_tracks(MovieTracking *tracking, int 
width, int height)
 {
-       int width, height;
        int tracknr= 0;
        MovieTrackingTrack *track;
        struct libmv_Tracks *tracks= libmv_tracksNew();;
 
-       /* XXX: could fail if footage uses images with different sizes */
-       BKE_movieclip_acquire_size(clip, NULL, &width, &height);
-
-       track= clip->tracking.tracks.first;
+       track= tracking->tracks.first;
        while(track) {
                int a= 0;
 
@@ -899,13 +895,12 @@
        return tracks;
 }
 
-static int retrive_libmv_reconstruct(MovieClip *clip, struct 
libmv_Reconstruction *reconstruction)
+static int retrive_libmv_reconstruct(MovieTracking *tracking, struct 
libmv_Reconstruction *libmv_reconstruction)
 {
        int tracknr= 0;
        int sfra= INT_MAX, efra= INT_MIN, a, origin_set= 0;
-       MovieTracking *tracking= &clip->tracking;
        MovieTrackingTrack *track;
-       MovieTrackingCamera *camera;
+       MovieTrackingReconstruction *reconstruction= &tracking->reconstruction;
        MovieReconstructedCamera *reconstructed;
        float origin[3]= {0.0f, 0.f, 0.0f};
        int ok= 1;
@@ -914,7 +909,7 @@
        while(track) {
                double pos[3];
 
-               if(libmv_reporojectionPointForTrack(reconstruction, tracknr, 
pos)) {
+               if(libmv_reporojectionPointForTrack(libmv_reconstruction, 
tracknr, pos)) {
                        track->bundle_pos[0]= pos[0];
                        track->bundle_pos[1]= pos[1];
                        track->bundle_pos[2]= pos[2];
@@ -936,19 +931,17 @@
                tracknr++;
        }
 
-       camera= &tracking->camera;
+       if(reconstruction->cameras)
+               MEM_freeN(reconstruction->cameras);
 
-       if(camera->reconstructed)
-               MEM_freeN(camera->reconstructed);
-
-       camera->reconnr= 0;
-       camera->reconstructed= NULL;
+       reconstruction->camnr= 0;
+       reconstruction->cameras= NULL;
        reconstructed= 
MEM_callocN((efra-sfra+1)*sizeof(MovieReconstructedCamera), "temp reconstructed 
camera");
 
        for(a= sfra; a<=efra; a++) {
                double matd[4][4];
 
-               if(libmv_reporojectionCameraForImage(reconstruction, a, matd)) {
+               if(libmv_reporojectionCameraForImage(libmv_reconstruction, a, 
matd)) {
                        int i, j;
                        float mat[4][4];
 
@@ -964,18 +957,18 @@
                        if(origin_set)
                                sub_v3_v3(mat[3], origin);
 
-                       copy_m4_m4(reconstructed[camera->reconnr].mat, mat);
-                       reconstructed[camera->reconnr].framenr= a;
-                       camera->reconnr++;
+                       copy_m4_m4(reconstructed[reconstruction->camnr].mat, 
mat);
+                       reconstructed[reconstruction->camnr].framenr= a;
+                       reconstruction->camnr++;
                } else {
                        ok= 0;
                        printf("No camera for frame %d\n", a);
                }
        }
 
-       if(camera->reconnr) {
-               camera->reconstructed= 
MEM_callocN(camera->reconnr*sizeof(MovieReconstructedCamera), "reconstructed 
camera");
-               memcpy(camera->reconstructed, reconstructed, 
camera->reconnr*sizeof(MovieReconstructedCamera));
+       if(reconstruction->camnr) {
+               reconstruction->cameras= 
MEM_callocN(reconstruction->camnr*sizeof(MovieReconstructedCamera), 
"reconstructed camera");
+               memcpy(reconstruction->cameras, reconstructed, 
reconstruction->camnr*sizeof(MovieReconstructedCamera));
        }
 
        if(origin_set) {
@@ -995,25 +988,28 @@
 
 #endif
 
-float BKE_tracking_solve_reconstruction(MovieClip *clip)
+float BKE_tracking_solve_reconstruction(MovieTracking *tracking, int width, 
int height)
 {
 #if WITH_LIBMV
        {
-               MovieTrackingCamera *camera= &clip->tracking.camera;
-               MovieTracking *tracking= &clip->tracking;
-               struct libmv_Tracks *tracks= create_libmv_tracks(clip);
+               MovieTrackingCamera *camera= &tracking->camera;
+               struct libmv_Tracks *tracks= create_libmv_tracks(tracking, 
width, height);
                struct libmv_Reconstruction *reconstruction = 
libmv_solveReconstruction(tracks,
                        tracking->settings.keyframe1, 
tracking->settings.keyframe2,
                        camera->focal, camera->principal[0], 
camera->principal[1],
                        camera->k1, camera->k2, camera->k3);
                float error= libmv_reprojectionError(reconstruction);
 
-               if(!retrive_libmv_reconstruct(clip, reconstruction))
+               tracking->reconstruction.error= error;
+
+               if(!retrive_libmv_reconstruct(tracking, reconstruction))
                        error= -1.f;
 
                libmv_destroyReconstruction(reconstruction);
                libmv_tracksDestroy(tracks);
 
+               tracking->reconstruction.flag|= TRACKING_RECONSTRUCTED;
+
                return error;
        }
 #endif
@@ -1040,22 +1036,22 @@
 
 MovieReconstructedCamera *BKE_tracking_get_reconstructed_camera(MovieTracking 
*tracking, int framenr)
 {
-       MovieTrackingCamera *camera= &tracking->camera;
+       MovieTrackingReconstruction *reconstruction= &tracking->reconstruction;
        int a= 0, d= 1;
 
-       if(!camera->reconnr)
+       if(!reconstruction->camnr)
                return NULL;
 
-       if(camera->last_camera<camera->reconnr)
-               a= camera->last_camera;
+       if(reconstruction->last_camera<reconstruction->camnr)
+               a= reconstruction->last_camera;
 
-       if(camera->reconstructed[a].framenr>=framenr)
+       if(reconstruction->cameras[a].framenr>=framenr)
                d= -1;
 
-       while(a>=0 && a<camera->reconnr) {
-               if(camera->reconstructed[a].framenr==framenr) {
-                       camera->last_camera= a;
-                       return &camera->reconstructed[a];
+       while(a>=0 && a<reconstruction->camnr) {
+               if(reconstruction->cameras[a].framenr==framenr) {
+                       reconstruction->last_camera= a;
+                       return &reconstruction->cameras[a];
 
                        break;
                }

Modified: branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c        
2011-08-02 18:16:48 UTC (rev 38949)
+++ branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c        
2011-08-02 18:25:18 UTC (rev 38950)
@@ -5706,7 +5706,7 @@
        if(fd->movieclipmap) clip->cache= newmclipadr(fd, clip->cache);
        else clip->cache= NULL;
 
-       tracking->camera.reconstructed= newdataadr(fd, 
tracking->camera.reconstructed);
+       tracking->reconstruction.cameras= newdataadr(fd, 
tracking->reconstruction.cameras);
 
        link_list(fd, &tracking->tracks);
 

Modified: branches/soc-2011-tomato/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenloader/intern/writefile.c       
2011-08-02 18:16:48 UTC (rev 38949)
+++ branches/soc-2011-tomato/source/blender/blenloader/intern/writefile.c       
2011-08-02 18:25:18 UTC (rev 38950)
@@ -2434,8 +2434,8 @@
                        MovieTrackingTrack *track;
                        writestruct(wd, ID_MC, "MovieClip", 1, clip);
 
-                       if(tracking->camera.reconnr)
-                               writestruct(wd, DATA, 
"MovieReconstructedCamera", tracking->camera.reconnr, 
tracking->camera.reconstructed);
+                       if(tracking->reconstruction.camnr)
+                               writestruct(wd, DATA, 
"MovieReconstructedCamera", tracking->reconstruction.camnr, 
tracking->reconstruction.cameras);
 
                        track= tracking->tracks.first;
                        while(track) {

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-08-02 18:16:48 UTC (rev 38949)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c      
2011-08-02 18:25:18 UTC (rev 38950)
@@ -71,7 +71,7 @@
 static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, 
Scene *scene)
 {
        float x;
-       int *points, totseg, sel_type;
+       int *points, totseg, sel_type, i, a;
        float sfra= SFRA, efra= EFRA;
        void *sel;
        float framelen= ar->winx/(efra-sfra+1);
@@ -87,8 +87,6 @@
        /* cached segments -- could be usefu lto debug caching strategies */
        BKE_movieclip_get_cache_segments(clip, &totseg, &points);
        if(totseg) {
-               int a;
-
                glColor4ub(128, 128, 255, 128);
 
                for(a= 0; a<totseg; a++) {
@@ -103,10 +101,9 @@
 
        /* track */
        if(sel_type==MCLIP_SEL_TRACK) {
-               int i, a= 0;
                MovieTrackingTrack *track= (MovieTrackingTrack *)sel;
 

@@ 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