summaryrefslogtreecommitdiff
path: root/rotord/rotor.h
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/rotor.h')
-rwxr-xr-xrotord/rotor.h35
1 files changed, 25 insertions, 10 deletions
diff --git a/rotord/rotor.h b/rotord/rotor.h
index fa166a2..d5dc60e 100755
--- a/rotord/rotor.h
+++ b/rotord/rotor.h
@@ -83,6 +83,7 @@ namespace Rotor {
class Node;
class Signal_node;
class Image_node;
+ class Parameter_input;
//http://blog.tomaka17.com/2012/03/libavcodeclibavformat-tutorial/
struct Packet {
@@ -258,7 +259,17 @@ namespace Rotor {
public:
bool connect(Signal_node *source);
Signal_input(const string &_desc): Input(_desc){};
-
+ };
+ class Parameter_input: public Signal_input{
+ public:
+ Parameter_input(const string &_param,const string &_desc): Signal_input(_desc),receiver(nullptr),parameter(_param){};
+ float *receiver;
+ void update(const Time_spec& time){ //gets input and updates variable
+ if (receiver){
+ *receiver=((Signal_node*)connection)->get_output(time);
+ }
+ }
+ string parameter;
};
class Node{
public:
@@ -266,7 +277,9 @@ namespace Rotor {
UUID uid; //every usable node has a UUID
int id;
vector<Signal_input*> inputs; //simple node can have signal inputs, output depends on node type
+ vector<Parameter_input*> parameter_inputs; //linked parameters can convert from settings to inputs
void create_signal_input(const string &description) {inputs.push_back(new Signal_input(description));};
+ void create_parameter_input(const string &parameter,const string &description) {parameter_inputs.push_back(new Parameter_input(parameter,description));};
string description;
string type;
string output_type;
@@ -280,10 +293,12 @@ namespace Rotor {
output_type=find_setting(settings,"output");
ID=find_setting(settings,"ID");
}
+ void update_params(const Time_spec& time);
};
class Signal_node: public Node{
public:
- virtual const float get_output(const Time_spec &time) { return 0.0f; };
+ const float get_output(const Time_spec &time) { update_params(time); return output(time); };
+ virtual const float output(const Time_spec &time) { return 0.0f; };
};
class Image_node: public Node{
public:
@@ -316,7 +331,7 @@ namespace Rotor {
bool init(int _channels,int _bits,int _samples,int _rate);
void cleanup();
int process_frame(uint8_t *data,int samples_in_frame);
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (analyser.features.size()) {
auto i=analyser.features.lower_bound(time.time);
if (i!=analyser.features.end()){
@@ -344,7 +359,7 @@ namespace Rotor {
base_settings(settings);
};
Track_time* clone(map<string,string> &_settings) { return new Track_time(_settings);};
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
return time.time/time.duration;
}
};
@@ -369,7 +384,7 @@ namespace Rotor {
if (_op=="<=") op=COMPARISON_Less_or_equal;
};
Comparison* clone(map<string,string> &_settings) { return new Comparison(_settings);};
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (inputs.size()) { //there should there be a way to specify number of inputs in the code rather than in xml
if (inputs[0]->connection) {
float in= (((Signal_node*)inputs[0]->connection)->get_output(time));
@@ -419,7 +434,7 @@ namespace Rotor {
if (_op=="%") op=ARITHMETIC_modulo;
};
Arithmetic* clone(map<string,string> &_settings) { return new Arithmetic(_settings);};
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (inputs.size()) { //there should there be a way to specify number of inputs in the code rather than in xml
if (inputs[0]->connection) {
float in= (((Signal_node*)inputs[0]->connection)->get_output(time));
@@ -455,7 +470,7 @@ namespace Rotor {
divide_amount=ofToFloat(find_setting(settings,"amount"));
};
Signal_divide* clone(map<string,string> &_settings) { return new Signal_divide(_settings);};
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (inputs.size()) { //there should there be a way to specify number of inputs in the code rather than in xml
if (inputs[0]->connection) {
return (((Signal_node*)inputs[0]->connection)->get_output(time))/divide_amount;
@@ -472,7 +487,7 @@ namespace Rotor {
base_settings(settings);
};
Is_new_integer* clone(map<string,string> &_settings) { return new Is_new_integer(_settings);};
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (inputs[0]->connection) {
float s1=(((Signal_node*)(inputs[0]->connection))->get_output(time));
float s2=(((Signal_node*)(inputs[0]->connection))->get_output(time.lastframe()));
@@ -490,7 +505,7 @@ namespace Rotor {
base_settings(settings);
};
On_off* clone(map<string,string> &_settings) { return new On_off(_settings);};
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (inputs[0]->connection) {
float s1=(((Signal_node*)(inputs[0]->connection))->get_output(time));
if ((int)s1%2) return 1.0f;
@@ -506,7 +521,7 @@ namespace Rotor {
};
Signal_output* clone(map<string,string> &_settings) { return new Signal_output(_settings);};
bool render(const float duration, const float framerate,string &xml_out);
- const float get_output(const Time_spec &time) {
+ const float output(const Time_spec &time) {
if (inputs[0]->connection) {
return ((Signal_node*)(inputs[0]->connection))->get_output(time);
}