00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _COP2_CHROMAKEY_H_
00021 #define _COP2_CHROMAKEY_H_
00022
00023 #include "COP2_API.h"
00024 #define ARG_CHROMAKEY_HUE (myParmBase + 0)
00025 #define ARG_CHROMAKEY_LUM (myParmBase + 1)
00026 #define ARG_CHROMAKEY_DISCARD (myParmBase + 2)
00027 #define ARG_CHROMAKEY_HUE_ROLLOFF (myParmBase + 3)
00028 #define ARG_CHROMAKEY_SAT_ROLLOFF (myParmBase + 4)
00029 #define ARG_CHROMAKEY_LUM_ROLLOFF (myParmBase + 5)
00030 #define ARG_CHROMAKEY_ROLL_FUNC (myParmBase + 6)
00031 #define ARG_CHROMAKEY_SUPER_SAMPLE (myParmBase + 7)
00032 #define ARG_CHROMAKEY_KEY_PLANE (myParmBase + 8)
00033
00034 #include "COP2_KeyBase.h"
00035
00036 class cop2_ChromaContext;
00037
00038 class COP2_API COP2_ChromaKey : public COP2_KeyBase
00039 {
00040 public:
00041 static OP_Node *myConstructor(OP_Network*, const char *,
00042 OP_Operator *);
00043 static OP_TemplatePair myTemplatePair;
00044 static OP_VariablePair myVariablePair;
00045 static PRM_Template myTemplateList[];
00046 static CH_LocalVariable myVariableList[];
00047 static const char *myInputLabels[];
00048
00049 unsigned disableParms();
00050 protected:
00051 virtual COP2_ContextData *newContextData(const TIL_Plane *, int,
00052 float t, int xres, int yres,
00053 int thread,int max_threads);
00054
00055 virtual bool isFrameEffectHandled() { return false; }
00056
00057 virtual void setColorParms(float hmin, float hmax,
00058 float smin, float smax,
00059 float lmin, float lmax,
00060 bool add, float t);
00061
00062 virtual void setSpillParms(float hmin, float hmax,
00063 float smin, float smax,
00064 float lmin, float lmax,
00065 bool add, float t);
00066 private:
00067 COP2_ChromaKey(OP_Network *parent, const char *name,
00068 OP_Operator *entry);
00069 virtual ~COP2_ChromaKey();
00070
00071 virtual const char *getKeyPlane(COP2_Context &context);
00072 virtual int getSuperSample(COP2_Context &context);
00073
00074 virtual bool convertToColorSpace(COP2_Context &context,
00075 const float *c1,
00076 const float *c2,
00077 const float *c3,
00078 const float *c4,
00079 float *&d1,
00080 float *&d2,
00081 float *&d3,
00082 float *&d4,
00083 int size);
00084
00085 virtual COP2_KeyFunction getKeyFunction(COP2_Context &context,
00086 void *&data);
00087
00088 virtual void colorFunction(COP2_Context &context,
00089 float val[4], float key);
00090
00091 virtual cop2_Interpolate getInterpFunction(COP2_Context &context,
00092 int component);
00093
00094 virtual void getShaderAndConstants(COP2_Context &context,
00095 UT_String &shader_funcs,
00096 RE_OGLComputeGPU &engine);
00097
00098 void HUE(float &h1, float &h2, float t)
00099 { h1 = evalFloat(ARG_CHROMAKEY_HUE, 0, t);
00100 h2 = evalFloat(ARG_CHROMAKEY_HUE, 1, t); }
00101
00102 void SAT(float &s1, float &s2, float t)
00103 { s1 = evalFloat(ARG_CHROMAKEY_HUE, 2, t);
00104 s2 = evalFloat(ARG_CHROMAKEY_HUE, 3, t); }
00105
00106 void LUM(float &l1, float &l2, float t)
00107 { l1 = evalFloat(ARG_CHROMAKEY_LUM, 0, t);
00108 l2 = evalFloat(ARG_CHROMAKEY_LUM, 1, t); }
00109
00110 float HUE_ROLLOFF(float t)
00111 { return evalFloat(ARG_CHROMAKEY_HUE_ROLLOFF, 0,t); }
00112
00113 float SAT_ROLLOFF(float t)
00114 { return evalFloat(ARG_CHROMAKEY_SAT_ROLLOFF, 0,t); }
00115
00116 float LUM_ROLLOFF(float t)
00117 { return evalFloat(ARG_CHROMAKEY_LUM_ROLLOFF, 0,t); }
00118
00119 int ROLLOFF_FUNCTION()
00120 { return evalInt(ARG_CHROMAKEY_ROLL_FUNC,0,0); }
00121
00122 int DISCARD()
00123 { return evalInt(ARG_CHROMAKEY_DISCARD,0,0); }
00124
00125 int SUPER_SAMPLE(float t)
00126 { return evalInt(ARG_CHROMAKEY_SUPER_SAMPLE,0,t); }
00127
00128 void KEY_PLANE(UT_String &st)
00129 { evalString(st, ARG_CHROMAKEY_KEY_PLANE, 0, 0.0f); }
00130
00131 int myParmBase;
00132 };
00133
00134 class COP2_API cop2_ChromaContext : public COP2_ContextData
00135 {
00136 public:
00137 cop2_ChromaContext() {}
00138 virtual ~cop2_ChromaContext() {}
00139
00140 float myHueMin, myHueMax;
00141 float mySatMin, mySatMax;
00142 float myLumMin, myLumMax;
00143 float myHueRolloff;
00144 float mySatRolloff;
00145 float myLumRolloff;
00146 UT_String myKeyPlane;
00147 int myRolloffFunc;
00148 int mySuperSample;
00149 int myDiscard;
00150 float (*myInterpFunc)(float);
00151 };
00152
00153 #endif