00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CHOP_VexContext__
00020 #define __CHOP_VexContext__
00021
00022 #include "CHOP_API.h"
00023 #include <UT/UT_Dependency.h>
00024 #include <VEX/VEX_ContextManager.h>
00025 #include <VEX/VEX_Context.h>
00026
00027 class CL_Clip;
00028
00029 DECLARE_DEPENDENCY(CHOP)
00030
00031 typedef enum {
00032 VCHOP_VALUE,
00033 VCHOP_INDEX,
00034
00035 VCHOP_START,
00036 VCHOP_END,
00037 VCHOP_RATE,
00038 VCHOP_LENGTH,
00039
00040 VCHOP_CHAN,
00041 VCHOP_NUMCHAN,
00042
00043 VCHOP_MAX_VARIABLES
00044 } VCHOP_Global;
00045
00046
00047 class CHOP_API CHOP_VexVariableMap
00048 {
00049 public:
00050 CHOP_VexVariableMap();
00051 ~CHOP_VexVariableMap();
00052
00053
00054
00055 static CHOP_VexVariableMap *getCurrent();
00056 static void setCurrent(CHOP_VexVariableMap *map);
00057
00058
00059
00060 void initData(VEX_Instance *func);
00061
00062
00063 void bind(VEX_Instance *func);
00064
00065
00066
00067
00068 void prepData(int start, int end, int numchan, float rate,
00069 int units, int ninputs, const CL_Clip **inputs);
00070
00071
00072
00073 void prepData(float *samples, int offset, int length,
00074 int channum);
00075
00076 void extractData();
00077
00078 int isRead(VCHOP_Global id) const { return myMap[id] >= 0; }
00079 int getMap(VCHOP_Global id) const { return myMap[id]; }
00080 void *getData(VCHOP_Global id)
00081 {
00082 return myMap[id] >= 0 ? myData[id] : 0;
00083 }
00084
00085 int isConnected(int input);
00086 float getInputSample(int input, int track, float sample);
00087 int getStart(int input);
00088 int getEnd(int input);
00089 float getRate(int input);
00090 int getNumTracks(int input);
00091 int getUnits() const { return myUnits; }
00092
00093 float getStartTime(int input);
00094 float getEndTime(int input);
00095 float getGlobalRate();
00096
00097
00098 private:
00099 int myMap [VCHOP_MAX_VARIABLES];
00100 void *myData[VCHOP_MAX_VARIABLES];
00101 int myStart, myEnd, myLength, myNumChannels;
00102 int myCurrentChannel;
00103 float mySampleRate;
00104 float myGlobalRate;
00105 int myReadFlag;
00106 int myNumInputs;
00107 int myUnits;
00108 const CL_Clip **myInput;
00109 };
00110
00111
00112 class CHOP_API CHOP_VexContext : public VEX_Context
00113 {
00114 public:
00115 virtual int getGlobalVariableEntries() const;
00116 virtual const char *getGlobalVariableName(int id) const;
00117 virtual const char *getGlobalVariableDescription(int id) const;
00118 virtual VEX_Type getGlobalVariableType(int id) const;
00119 virtual VEX_Storage getGlobalVariableStorage(int id) const;
00120 virtual int getGlobalVariableReadWrite(int id) const;
00121
00122 private:
00123 CHOP_VexContext();
00124 virtual ~CHOP_VexContext();
00125 virtual void addGlobalVariables(VEX_Assemble &as) const;
00126
00127 static VEX_Context *getChopContext();
00128 static void clearContext();
00129
00130 friend class CHOP_DummyFriend;
00131
00132 VEX_DECLARE_CONTEXT(VEX_CHOP_CONTEXT)
00133 };
00134
00135 #endif
00136