diff options
Diffstat (limited to 'rotord')
| -rw-r--r-- | rotord/src/graph.cpp | 54 |
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; } |
