summaryrefslogtreecommitdiff
path: root/rotord
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-10-18 08:30:16 -0700
committerComment <tim@gray.(none)>2013-10-18 08:30:16 -0700
commit343afc68943fc7f1815e5eb5fd2df3a8cd201d3c (patch)
treef1c9df401e9ad46628a2e18025551ba04eff1c07 /rotord
parent7ede5e547851f61dd600c12532a09038d811c418 (diff)
json loader fixes
Diffstat (limited to 'rotord')
-rw-r--r--rotord/src/graph.cpp54
1 files changed, 31 insertions, 23 deletions
diff --git a/rotord/src/graph.cpp b/rotord/src/graph.cpp
index e6443d3..c33c59d 100644
--- a/rotord/src/graph.cpp
+++ b/rotord/src/graph.cpp
@@ -112,7 +112,7 @@ bool Graph::video_render(const string &output_filename,const float framerate,int
}
//
//setup defaults
-
+
AVCodecID codecId=AV_CODEC_ID_H264; //MPEG4;
std::string container;
Poco::StringTokenizer t(output_filename,".");
@@ -212,7 +212,7 @@ bool Graph::video_render(const string &output_filename,const float framerate,int
//cerr<<"videoloader: "<<vf<<" seconds, vstep "<<vstep<<" ,asking for frame "<<((int)((vf*framerate)+0.5))<<endl
-
+
if (usingaudio) {
i=video_output->get_image_output(Frame_spec(vf,framerate,duration,outW,outH,a));
}
@@ -227,7 +227,7 @@ bool Graph::video_render(const string &output_filename,const float framerate,int
if (usingaudio) {delete a;};
}
-
+
//exporter.encodeFrame(i->RGBdata,true); //final keyframe;
exporter.finishRecord();
@@ -317,16 +317,25 @@ bool Graph::parseJson(string &data,string &media_path){
init(root["ID"].asString(),root["description"].asString());
Json::Value jnodes = root["nodeDefinitions"];
for ( int i = 0; i < jnodes.size(); ++i ) {
+ string nodeID=jnodes[i]["id"].asString();
//cerr<<"json found node: "<<jnodes[i]["type"].asString()<<endl;
map<string,string> settings;
vector<string> attrs;
- //iterate members
settings["type"]=jnodes[i]["type"].asString();
- settings["title"]=jnodes[i]["title"].asString();
- settings["description"]=jnodes[i]["description"].asString();
+ if (settings["type"]=="video_cycler"){
+ //breakpoint
+ cerr<<"making video cycler"<<endl;
+ }
+ //attributes
+ settings["media_path"]=media_path;
+ for (int m=0;m<jnodes[i]["attributes"].size();m++){
+ string attribute=jnodes[i]["attributes"][m]["name"].asString();
+ string val=jnodes[i]["attributes"][m]["value"].asString();
+ settings[attribute]=val;
+ //cerr << "Rotor: setting attribute '"<<attribute<<"' of "<<nodeID<<" to "<<val<<endl;
+ }
Node* node=factory.create(settings);
if (node) {
- string nodeID=jnodes[i]["id"].asString();
if (nodes.find(nodeID)==nodes.end()){
cerr << "Rotor: creating node '"<<nodeID<<"': '"<< settings["type"] << "'" << endl;
nodes[nodeID]=node;
@@ -347,8 +356,23 @@ bool Graph::parseJson(string &data,string &media_path){
}
else cerr << "Rotor: input " << j << " of node: '" << nodeID << "' does not exist" << endl;
}
+
+
//image inputs
if (dynamic_cast<Image_node*>(nodes[nodeID])!=nullptr) {
+
+
+ //handle expandable inputs
+ if ((((Image_node*)nodes[nodeID])->image_inputs.size()<=jnodes[i]["image_inputs"].size())&&((Image_node*)nodes[nodeID])->duplicate_inputs){
+ string desc=((Image_node*)nodes[nodeID])->image_inputs[0]->description;
+ string title=((Image_node*)nodes[nodeID])->image_inputs[0]->title;
+ while(((Image_node*)nodes[nodeID])->image_inputs.size()<=jnodes[i]["image_inputs"].size()){
+ ((Image_node*)nodes[nodeID])->create_image_input(desc,title);
+ cerr<<"creating an image input"<<endl;
+ }
+ }
+
+
for (int k=0;k<jnodes[i]["image_inputs"].size();k++){
if (((Image_node*)nodes[nodeID])->image_inputs.size()<=k) {
if (nodes[nodeID]->duplicate_inputs) {
@@ -400,22 +424,6 @@ bool Graph::parseJson(string &data,string &media_path){
else cerr << "Rotor: cannot find parameter '" << parameter << "' of "<<settings["type"]<<" "<< nodeID << endl;
}
- //attributes
- nodes[nodeID]->create_attribute("media_path","","",media_path);
- for (int m=0;m<jnodes[i]["attributes"].size();m++){
- string attribute=jnodes[i]["attributes"][m]["name"].asString();
- if (nodes[nodeID]->attributes.find(attribute)!=nodes[nodeID]->attributes.end()) {
- string val=jnodes[i]["attributes"][m]["value"].asString();
- if (val!=nodes[nodeID]->attributes.find(attribute)->second->value){
- nodes[nodeID]->attributes.find(attribute)->second->value=val;
- nodes[nodeID]->init_attribute(attribute);
- cerr << "Rotor: set attribute '"<<attribute<<"' of "<<nodeID<<" to "<<val<<endl;
- }
- nodes[nodeID]->attributes.find(attribute)->second->value=val;
- }
- else cerr << "Rotor: cannot find attribute '" << attribute << "' of "<<settings["type"]<<" "<< nodeID << endl;
- }
-
}
else cerr << "Rotor: duplicate node '"<<nodeID<<"' "<< endl;
}