[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38625] branches/soc-2011-tomato/source/ blender/blenkernel/intern/tracking.c: Camera tracking integration
Sergey Sharybin
g.ulairi at gmail.com
Fri Jul 22 23:52:17 CEST 2011
Revision: 38625
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38625
Author: nazgul
Date: 2011-07-22 21:52:17 +0000 (Fri, 22 Jul 2011)
Log Message:
-----------
Camera tracking integration
===========================
Fixed bug in Join Tracks operator: if there are two keyframes for
the same frame but one of makers is disabled then there's no error.
Modified Paths:
--------------
branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c 2011-07-22 19:02:11 UTC (rev 38624)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c 2011-07-22 21:52:17 UTC (rev 38625)
@@ -378,27 +378,43 @@
int BKE_tracking_test_join_tracks(MovieTrackingTrack *dst_track, MovieTrackingTrack *src_track)
{
int i, a= 0, b= 0, tot= dst_track->markersnr+src_track->markersnr;
+ int count= 0;
for(i= 0; i<tot; i++) {
- if(b>=dst_track->markersnr || a>=src_track->markersnr)
- break;
+ if(a>=src_track->markersnr) {
+ b++;
+ count++;
+ }
+ else if(b>=dst_track->markersnr) {
+ a++;
+ count++;
+ }
+ else if(src_track->markers[a].framenr<dst_track->markers[b].framenr) {
+ a++;
+ count++;
+ } else if(src_track->markers[a].framenr>dst_track->markers[b].framenr) {
+ b++;
+ count++;
+ } else {
+ if((src_track->markers[a].flag&MARKER_DISABLED)==0 && (dst_track->markers[b].flag&MARKER_DISABLED)==0)
+ return 0;
- if(src_track->markers[a].framenr<dst_track->markers[b].framenr)
a++;
- else if(src_track->markers[a].framenr>dst_track->markers[b].framenr)
b++;
- else
- return 0;
+ count++;
+ }
}
- return 1;
+ return count;
}
void BKE_tracking_join_tracks(MovieTrackingTrack *dst_track, MovieTrackingTrack *src_track)
{
- int i, a= 0, b= 0, tot= dst_track->markersnr+src_track->markersnr;
+ int i, a= 0, b= 0, tot;
MovieTrackingMarker *markers;
+ tot= BKE_tracking_test_join_tracks(dst_track, src_track);
+
markers= MEM_callocN(tot*sizeof(MovieTrackingMarker), "tracking joined tracks");
for(i= 0; i<tot; i++) {
@@ -408,10 +424,17 @@
else if(a>=src_track->markersnr) {
markers[i]= dst_track->markers[b++];
}
- else if(src_track->markers[a].framenr<dst_track->markers[b].framenr)
+ else if(src_track->markers[a].framenr<dst_track->markers[b].framenr) {
markers[i]= src_track->markers[a++];
- else
+ } else if(src_track->markers[a].framenr>dst_track->markers[b].framenr) {
markers[i]= dst_track->markers[b++];
+ } else {
+ if((src_track->markers[a].flag&MARKER_DISABLED)) markers[i]= dst_track->markers[b];
+ else markers[i]= src_track->markers[a++];
+
+ a++;
+ b++;
+ }
}
MEM_freeN(dst_track->markers);
More information about the Bf-blender-cvs
mailing list