Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-12-05 22:57:17 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-12-05 22:57:17 +0400
commit9355cc5c399a9d7cd49815c68eeeac788022ba1a (patch)
treec4b9c3c19e31b7a06f98486fcbb85008dc51ca5c /source/blender/blenloader
parentf55f9e95db44838130a18f80b33bd77f58e8a987 (diff)
Object tracking; initial commit
This commit implements basis stuff needed for object tracking, use case isn't perfect now, interface also should be cleaned a bit. - Added list of objects to be tracked. Default there's only one object called "Camera" which is used for solving camera motion. Other objects can be added and each of them will have it;s own list of tracks. Only one object can be used for camera solving at this moment. - Added new constraint called "Object Tracking" which makes oriented object be moving in the save way as solved object motion. - Scene orientation tools can be used for orienting object to bundles. - All tools which works with list of tracks or reconstruction data now gets that lists from active editing object. - All objects and their tracking data are available via python api.
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/intern/readfile.c52
-rw-r--r--source/blender/blenloader/intern/writefile.c39
2 files changed, 70 insertions, 21 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 13e2ed49e6a..6479c3ee04d 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5934,10 +5934,29 @@ static void lib_link_group(FileData *fd, Main *main)
/* ***************** READ MOVIECLIP *************** */
+static void direct_link_movieReconstruction(FileData *fd, MovieTrackingReconstruction *reconstruction)
+{
+ reconstruction->cameras= newdataadr(fd, reconstruction->cameras);
+}
+
+static void direct_link_movieTracks(FileData *fd, ListBase *tracksbase)
+{
+ MovieTrackingTrack *track;
+
+ link_list(fd, tracksbase);
+
+ track= tracksbase->first;
+ while(track) {
+ track->markers= newdataadr(fd, track->markers);
+
+ track= track->next;
+ }
+}
+
static void direct_link_movieclip(FileData *fd, MovieClip *clip)
{
MovieTracking *tracking= &clip->tracking;
- MovieTrackingTrack *track;
+ MovieTrackingObject *object;
if(fd->movieclipmap) clip->cache= newmclipadr(fd, clip->cache);
else clip->cache= NULL;
@@ -5945,16 +5964,8 @@ static void direct_link_movieclip(FileData *fd, MovieClip *clip)
if(fd->movieclipmap) clip->tracking.camera.intrinsics= newmclipadr(fd, clip->tracking.camera.intrinsics);
else clip->tracking.camera.intrinsics= NULL;
- tracking->reconstruction.cameras= newdataadr(fd, tracking->reconstruction.cameras);
-
- link_list(fd, &tracking->tracks);
-
- track= tracking->tracks.first;
- while(track) {
- track->markers= newdataadr(fd, track->markers);
-
- track= track->next;
- }
+ direct_link_movieTracks(fd, &tracking->tracks);
+ direct_link_movieReconstruction(fd, &tracking->reconstruction);
clip->tracking.act_track= newdataadr(fd, clip->tracking.act_track);
@@ -5965,6 +5976,16 @@ static void direct_link_movieclip(FileData *fd, MovieClip *clip)
clip->tracking.stabilization.ok= 0;
clip->tracking.stabilization.scaleibuf= NULL;
clip->tracking.stabilization.rot_track= newdataadr(fd, clip->tracking.stabilization.rot_track);
+
+ link_list(fd, &tracking->objects);
+
+ object= tracking->objects.first;
+ while(object) {
+ direct_link_movieTracks(fd, &object->tracks);
+ direct_link_movieReconstruction(fd, &object->reconstruction);
+
+ object= object->next;
+ }
}
static void lib_link_movieclip(FileData *fd, Main *main)
@@ -12657,7 +12678,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* put compatibility code here until next subversion bump */
{
- /* nothing! */
+ MovieClip *clip;
+
+ for (clip= main->movieclip.first; clip; clip= clip->id.next) {
+ MovieTracking *tracking= &clip->tracking;
+
+ if(tracking->objects.first == NULL)
+ BKE_tracking_new_object(tracking, "Camera");
+ }
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 00710e67cf2..4828e9703fb 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2522,6 +2522,27 @@ static void write_scripts(WriteData *wd, ListBase *idbase)
}
}
+static void write_movieTracks(WriteData *wd, ListBase *tracks)
+{
+ MovieTrackingTrack *track;
+
+ track= tracks->first;
+ while(track) {
+ writestruct(wd, DATA, "MovieTrackingTrack", 1, track);
+
+ if(track->markers)
+ writestruct(wd, DATA, "MovieTrackingMarker", track->markersnr, track->markers);
+
+ track= track->next;
+ }
+}
+
+static void write_movieReconstruction(WriteData *wd, MovieTrackingReconstruction *reconstruction)
+{
+ if(reconstruction->camnr)
+ writestruct(wd, DATA, "MovieReconstructedCamera", reconstruction->camnr, reconstruction->cameras);
+}
+
static void write_movieclips(WriteData *wd, ListBase *idbase)
{
MovieClip *clip;
@@ -2530,20 +2551,20 @@ static void write_movieclips(WriteData *wd, ListBase *idbase)
while(clip) {
if(clip->id.us>0 || wd->current) {
MovieTracking *tracking= &clip->tracking;
- MovieTrackingTrack *track;
+ MovieTrackingObject *object;
writestruct(wd, ID_MC, "MovieClip", 1, clip);
- if(tracking->reconstruction.camnr)
- writestruct(wd, DATA, "MovieReconstructedCamera", tracking->reconstruction.camnr, tracking->reconstruction.cameras);
+ write_movieTracks(wd, &tracking->tracks);
+ write_movieReconstruction(wd, &tracking->reconstruction);
- track= tracking->tracks.first;
- while(track) {
- writestruct(wd, DATA, "MovieTrackingTrack", 1, track);
+ object= tracking->objects.first;
+ while(object) {
+ writestruct(wd, DATA, "MovieTrackingObject", 1, object);
- if(track->markers)
- writestruct(wd, DATA, "MovieTrackingMarker", track->markersnr, track->markers);
+ write_movieTracks(wd, &object->tracks);
+ write_movieReconstruction(wd, &object->reconstruction);
- track= track->next;
+ object= object->next;
}
}