From 7a8504a5f76b28e2ea6d4d9b4658cfe56b49fb57 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Mon, 9 Sep 2013 10:17:58 +0100 Subject: loading json from patchbay --- rotord/src/graph.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'rotord/src') diff --git a/rotord/src/graph.cpp b/rotord/src/graph.cpp index 313df2a..ed8c188 100644 --- a/rotord/src/graph.cpp +++ b/rotord/src/graph.cpp @@ -280,7 +280,7 @@ bool Graph::parseJson(string &data,string &media_path){ nodes.clear(); check_audio(root["audio"].asString(),media_path); init(root["ID"].asString(),root["description"].asString()); - Json::Value jnodes = root["nodes"]; + Json::Value jnodes = root["nodeDefinitions"]; for ( int i = 0; i < jnodes.size(); ++i ) { //cerr<<"json found node: "< settings; @@ -348,7 +348,10 @@ bool Graph::parseJson(string &data,string &media_path){ if (nodes[nodeID]->parameters.find(parameter)!=nodes[nodeID]->parameters.end()) { float val=jnodes[i]["parameters"][l]["value"].asFloat(); - nodes[nodeID]->parameters.find(parameter)->second->value=val; + if (val!=nodes[nodeID]->parameters.find(parameter)->second->value){ + nodes[nodeID]->parameters.find(parameter)->second->value=val; + cerr << "Rotor: set parameter '"<parameters[parameter]->connect(nodes[fromID])){ @@ -367,6 +370,10 @@ bool Graph::parseJson(string &data,string &media_path){ 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; + cerr << "Rotor: set attribute '"<attributes.find(attribute)->second->value=val; } else cerr << "Rotor: cannot find attribute '" << attribute << "' of "< Date: Mon, 9 Sep 2013 15:02:57 +0100 Subject: graph nodes management --- rotord/src/ffmpeg-fas_wrapper.h | 15 +++++++++++++-- rotord/src/ffmpeg_fas.h | 5 +++++ rotord/src/graph.cpp | 4 ++-- rotord/src/graph.h | 7 +++++++ rotord/src/rendercontext.cpp | 2 +- 5 files changed, 28 insertions(+), 5 deletions(-) (limited to 'rotord/src') diff --git a/rotord/src/ffmpeg-fas_wrapper.h b/rotord/src/ffmpeg-fas_wrapper.h index b70cd2d..dedff62 100644 --- a/rotord/src/ffmpeg-fas_wrapper.h +++ b/rotord/src/ffmpeg-fas_wrapper.h @@ -1,5 +1,16 @@ -#ifndef ffmpeg-fas_wrapper_H -#define ffmpeg-fas_wrapper_H +#ifndef ffmpeg_fas_wrapper_H +#define ffmpeg_fas_wrapper_H +#include +#include "ffmpeg_fas.h" + +namespace ffmpeg_fas { + class decoder + { + public: + bool open(std::string& fileName); + fas_raw_image_type frame; + }; +} #endif diff --git a/rotord/src/ffmpeg_fas.h b/rotord/src/ffmpeg_fas.h index 953c8b4..0c51103 100644 --- a/rotord/src/ffmpeg_fas.h +++ b/rotord/src/ffmpeg_fas.h @@ -29,6 +29,11 @@ #define __extern extern #endif + +#ifndef UINT64_C +#define UINT64_C(c) (c ## ULL) +#endif + #include "seek_indices.h" #include diff --git a/rotord/src/graph.cpp b/rotord/src/graph.cpp index ed8c188..03d0a4b 100644 --- a/rotord/src/graph.cpp +++ b/rotord/src/graph.cpp @@ -277,7 +277,7 @@ bool Graph::parseJson(string &data,string &media_path){ return false; } //we know the json validates so clear the existing graph - nodes.clear(); + clear(); check_audio(root["audio"].asString(),media_path); init(root["ID"].asString(),root["description"].asString()); Json::Value jnodes = root["nodeDefinitions"]; @@ -392,7 +392,7 @@ bool Graph::parseJson(string &data,string &media_path){ return true; } bool Graph::parseXml(string media_path){ - nodes.clear(); + clear(); check_audio(xml.getAttribute("patchbay","audio","",0),media_path); init(xml.getAttribute("patchbay","ID","",0),xml.getValue("patchbay","",0)); if(xml.pushTag("patchbay")) { diff --git a/rotord/src/graph.h b/rotord/src/graph.h index 231d784..4c68eab 100644 --- a/rotord/src/graph.h +++ b/rotord/src/graph.h @@ -24,6 +24,13 @@ namespace Rotor { framerate=25.0f; cancelled=false; }; + ~Graph(){ clear(); }; + void clear(){ + for (auto n: nodes) { + delete n.second; + } + nodes.clear(); + } string uid; //every version of a graph has a UUID, no particular need to actually read its data(?) //?? is it faster than using strings?? string description; diff --git a/rotord/src/rendercontext.cpp b/rotord/src/rendercontext.cpp index 8b4053f..c1cef59 100644 --- a/rotord/src/rendercontext.cpp +++ b/rotord/src/rendercontext.cpp @@ -227,7 +227,7 @@ void Render_context::session_command(const Session_command& command,xmlIO& XML,H } if (command.method=="DELETE") { //for now - graph=Graph(); + graph.clear(); logger.information("graph deleted"); XML.addValue("status","graph deleted"); status=HTTPResponse::HTTP_OK; -- cgit v1.2.3 From 79af8bf904b9ddb50b11ac231a2db517f1bdd55b Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Mon, 9 Sep 2013 19:17:53 +0100 Subject: in search of memory leaks --- rotord/src/rotor.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'rotord/src') diff --git a/rotord/src/rotor.h b/rotord/src/rotor.h index b2f50e6..a247c66 100755 --- a/rotord/src/rotor.h +++ b/rotord/src/rotor.h @@ -167,6 +167,9 @@ namespace Rotor { Node(){duplicate_inputs=false;}; virtual Node* clone(map &_settings)=0; //pure virtual virtual ~Node(){ + for (auto a: attributes) delete a.second; + for (auto p: parameters) delete p.second; + for (auto s: inputs) delete s; }; vector inputs; //simple node can have signal inputs, output depends on node type unordered_map parameters; //linked parameters can convert from settings to inputs @@ -234,7 +237,9 @@ namespace Rotor { }; class Image_node: public Node{ public: - virtual ~Image_node(){}; + virtual ~Image_node(){ + for (auto i: image_inputs) delete i; + }; vector image_inputs; //image node also has image inputs and outputs void create_image_input(const string &_title,const string &_desc,Node* _connect=nullptr) { image_inputs.push_back(new Image_input(_desc,_title,_connect)); -- cgit v1.2.3