[Bf-blender-cvs] [bc51238] soc-2016-multiview: Multiview reconstruction: Fix issue with reading .blend files

Sergey Sharybin noreply at git.blender.org
Wed Jun 29 09:33:01 CEST 2016


Commit: bc51238354320f90706f32dbe7a6a13be9c34264
Author: Sergey Sharybin
Date:   Wed Jun 29 12:28:51 2016 +0500
Branches: soc-2016-multiview
https://developer.blender.org/rBbc51238354320f90706f32dbe7a6a13be9c34264

Multiview reconstruction: Fix issue with reading .blend files

The issue was caused by attempt to iterate list which pointers were not
properly restored yet. Now the flow is following:

- List pointers gets restored on direct_link_movieclip since those
  addresses are guaranteed to be from the current main.

- Self track and clip pointers are also restored on direct link
  (i assume self_clip is actually clip itself, so do we really need
  this pointer?)

- Other clip and track are restored on lib link since those pointers
  might come from linked movie clip.

===================================================================

M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c

===================================================================

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d23b8ba..06e8275 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7409,6 +7409,17 @@ static void direct_link_moviePlaneTracks(FileData *fd, ListBase *plane_tracks_ba
 	}
 }
 
+static void direct_link_movieCorrespondences(FileData *fd,
+                                             ListBase *correspondences)
+{
+	MovieTrackingCorrespondence *corr;
+	link_list(fd, correspondences);
+	for (corr = correspondences->first; corr != NULL; corr = corr->next) {
+		corr->self_track = newdataadr(fd, corr->self_track);
+		corr->self_clip = newdataadr(fd, corr->self_clip);
+	}
+}
+
 static void direct_link_movieclip(FileData *fd, MovieClip *clip)
 {
 	MovieTracking *tracking = &clip->tracking;
@@ -7424,6 +7435,7 @@ static void direct_link_movieclip(FileData *fd, MovieClip *clip)
 
 	direct_link_movieTracks(fd, &tracking->tracks);
 	direct_link_moviePlaneTracks(fd, &tracking->plane_tracks);
+	direct_link_movieCorrespondences(fd, &tracking->correspondences);
 	direct_link_movieReconstruction(fd, &tracking->reconstruction);
 
 	clip->tracking.act_track = newdataadr(fd, clip->tracking.act_track);
@@ -7467,16 +7479,13 @@ static void lib_link_moviePlaneTracks(FileData *fd, MovieClip *clip, ListBase *t
 	}
 }
 
-static void lib_link_movieCorrespondences(FileData *fd, MovieClip *clip, ListBase *correspondences)
+static void lib_link_movieCorrespondences(FileData *fd,
+                                          MovieClip *clip,
+                                          ListBase *correspondences)
 {
 	MovieTrackingCorrespondence *corr;
-
 	for (corr = correspondences->first; corr != NULL; corr = corr->next) {
-		corr = newlibadr(fd, clip->id.lib, corr);
-
-		corr->self_track = newlibadr(fd, clip->id.lib, corr->self_track);
 		corr->other_track = newlibadr(fd, clip->id.lib, corr->other_track);
-		corr->self_clip = newlibadr(fd, clip->id.lib, corr->self_clip);
 		corr->other_clip = newlibadr(fd, clip->id.lib, corr->other_clip);
 	}
 }
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index fbb96ef..5331656 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -3192,10 +3192,7 @@ static void write_moviePlaneTracks(WriteData *wd, ListBase *plane_tracks_base)
 static void write_movieCorrespondences(WriteData *wd, ListBase *correspondence_base)
 {
 	MovieTrackingCorrespondence *corr;
-	for (corr = correspondence_base->first;
-	     corr != NULL;
-	     corr = corr->next)
-	{
+	for (corr = correspondence_base->first; corr != NULL; corr = corr->next) {
 		writestruct(wd, DATA, "MovieTrackingCorrespondence", 1, corr);
 	}
 }




More information about the Bf-blender-cvs mailing list