[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49285] trunk/blender/source/blender/ compositor: Track input node: move all initializaiton to initExecution function

Sergey Sharybin sergey.vfx at gmail.com
Fri Jul 27 13:07:09 CEST 2012


Revision: 49285
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49285
Author:   nazgul
Date:     2012-07-27 11:07:09 +0000 (Fri, 27 Jul 2012)
Log Message:
-----------
Track input node: move all initializaiton to initExecution function

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h

Modified: trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp	2012-07-27 11:05:08 UTC (rev 49284)
+++ trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp	2012-07-27 11:07:09 UTC (rev 49285)
@@ -65,4 +65,5 @@
 	outputY->relinkConnections(operationY->getOutputSocket());
 
 	graph->addOperation(operationX);
+	graph->addOperation(operationY);
 }

Modified: trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp	2012-07-27 11:05:08 UTC (rev 49284)
+++ trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp	2012-07-27 11:07:09 UTC (rev 49285)
@@ -39,58 +39,69 @@
 TrackPositionOperation::TrackPositionOperation() : NodeOperation()
 {
 	this->addOutputSocket(COM_DT_VALUE);
-	this->movieClip = NULL;
-	this->framenumber = 0;
-	this->trackingObject[0] = 0;
-	this->trackName[0] = 0;
-	this->axis = 0;
-	this->relative = false;
+	this->m_movieClip = NULL;
+	this->m_framenumber = 0;
+	this->m_trackingObjectName[0] = 0;
+	this->m_trackName[0] = 0;
+	this->m_axis = 0;
+	this->m_relative = false;
 }
 
-void TrackPositionOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler)
+void TrackPositionOperation::initExecution()
 {
+	MovieTracking *tracking = NULL;
 	MovieClipUser user = {0};
-	MovieTracking *tracking = &movieClip->tracking;
-	MovieTrackingObject *object = BKE_tracking_object_get_named(tracking, this->trackingObject);
-	MovieTrackingTrack *track;
-	MovieTrackingMarker *marker;
-	int width, height;
+	MovieTrackingObject *object;
 
-	outputValue[0] = 0.0f;
+	zero_v2(this->m_markerPos);
+	zero_v2(this->m_relativePos);
 
-	if (!object)
+	if (!this->m_movieClip)
 		return;
 
-	track = BKE_tracking_track_get_named(tracking, object, this->trackName);
+	tracking = &this->m_movieClip->tracking;
 
-	if (!track)
-		return;
+	BKE_movieclip_user_set_frame(&user, this->m_framenumber);
+	BKE_movieclip_get_size(this->m_movieClip, &user, &this->m_width, &this->m_height);
 
-	BKE_movieclip_user_set_frame(&user, this->framenumber);
-	BKE_movieclip_get_size(this->movieClip, &user, &width, &height);
+	object = BKE_tracking_object_get_named(tracking, this->m_trackingObjectName);
+	if (object) {
+		MovieTrackingTrack *track;
 
-	marker = BKE_tracking_marker_get(track, this->framenumber);
+		track = BKE_tracking_track_get_named(tracking, object, this->m_trackName);
 
-	outputValue[0] = marker->pos[this->axis];
+		if (track) {
+			MovieTrackingMarker *marker;
 
-	if (this->relative) {
-		int i;
+			marker = BKE_tracking_marker_get(track, this->m_framenumber);
 
-		for (i = 0; i < track->markersnr; i++) {
-			marker = &track->markers[i];
+			copy_v2_v2(this->m_markerPos, marker->pos);
 
-			if ((marker->flag & MARKER_DISABLED) == 0) {
-				outputValue[0] -= marker->pos[this->axis];
+			if (this->m_relative) {
+				int i;
 
-				break;
+				for (i = 0; i < track->markersnr; i++) {
+					marker = &track->markers[i];
+
+					if ((marker->flag & MARKER_DISABLED) == 0) {
+						copy_v2_v2(this->m_relativePos, marker->pos);
+
+						break;
+					}
+				}
 			}
 		}
 	}
+}
 
-	if (this->axis == 0)
-		outputValue[0] *= width;
+void TrackPositionOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler)
+{
+	outputValue[0] = this->m_markerPos[this->m_axis] - this->m_relativePos[this->m_axis];
+
+	if (this->m_axis == 0)
+		outputValue[0] *= this->m_width;
 	else
-		outputValue[0] *= height;
+		outputValue[0] *= this->m_height;
 }
 
 void TrackPositionOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])

Modified: trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h	2012-07-27 11:05:08 UTC (rev 49284)
+++ trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h	2012-07-27 11:07:09 UTC (rev 49285)
@@ -31,6 +31,7 @@
 
 #include "DNA_scene_types.h"
 #include "DNA_movieclip_types.h"
+#include "DNA_tracking_types.h"
 
 #include "BLI_listbase.h"
 
@@ -39,13 +40,17 @@
   */
 class TrackPositionOperation : public NodeOperation {
 protected:
-	MovieClip *movieClip;
-	int framenumber;
-	char trackingObject[64];
-	char trackName[64];
-	int axis;
-	bool relative;
+	MovieClip *m_movieClip;
+	int m_framenumber;
+	char m_trackingObjectName[64];
+	char m_trackName[64];
+	int m_axis;
+	bool m_relative;
 
+	int m_width, m_height;
+	float m_markerPos[2];
+	float m_relativePos[2];
+
 	/**
 	  * Determine the output resolution. The resolution is retrieved from the Renderer
 	  */
@@ -54,13 +59,15 @@
 public:
 	TrackPositionOperation();
 
-	void setMovieClip(MovieClip *clip) {this->movieClip = clip;}
-	void setTrackingObject(char *object) {strncpy(this->trackingObject, object, sizeof(this->trackingObject));}
-	void setTrackName(char *track) {strncpy(this->trackName, track, sizeof(this->trackName));}
-	void setFramenumber(int framenumber) {this->framenumber = framenumber;}
-	void setAxis(int value) {this->axis = value;}
-	void setRelative(bool value) {this->relative = value;}
+	void setMovieClip(MovieClip *clip) {this->m_movieClip = clip;}
+	void setTrackingObject(char *object) {strncpy(this->m_trackingObjectName, object, sizeof(this->m_trackingObjectName));}
+	void setTrackName(char *track) {strncpy(this->m_trackName, track, sizeof(this->m_trackName));}
+	void setFramenumber(int framenumber) {this->m_framenumber = framenumber;}
+	void setAxis(int value) {this->m_axis = value;}
+	void setRelative(bool value) {this->m_relative = value;}
 
+	void initExecution();
+
 	void executePixel(float *color, float x, float y, PixelSampler sampler);
 
 	const bool isSetOperation() const { return true; }




More information about the Bf-blender-cvs mailing list