[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