[DEV] modify dot file

This commit is contained in:
Edouard DUPIN 2015-03-05 22:14:07 +01:00
parent 720c8e7764
commit 893cf1d5c0
3 changed files with 74 additions and 90 deletions

View File

@ -58,14 +58,14 @@ bool river::Interface::init(const std::string& _name,
if ( m_node->isInput() == true if ( m_node->isInput() == true
&& m_mode == river::modeInterface_input) { && m_mode == river::modeInterface_input) {
m_process.setInputConfig(m_node->getInterfaceFormat()); m_process.setInputConfig(m_node->getInterfaceFormat());
// add all time the volume stage : // Add volume only if the Low level has a volume (otherwise it will be added by the application)
std11::shared_ptr<drain::Volume> algo = drain::Volume::create();
//algo->setInputFormat(m_node->getInterfaceFormat());
algo->setName("volume");
m_process.pushBack(algo);
RIVER_INFO("add basic volume stage (1)");
std11::shared_ptr<drain::VolumeElement> tmpVolume = m_node->getVolume(); std11::shared_ptr<drain::VolumeElement> tmpVolume = m_node->getVolume();
if (tmpVolume != nullptr) { if (tmpVolume != nullptr) {
// add all time the volume stage :
std11::shared_ptr<drain::Volume> algo = drain::Volume::create();
//algo->setInputFormat(m_node->getInterfaceFormat());
algo->setName("volume");
m_process.pushBack(algo);
RIVER_INFO(" add volume for node"); RIVER_INFO(" add volume for node");
algo->addVolumeStage(tmpVolume); algo->addVolumeStage(tmpVolume);
} }
@ -73,14 +73,14 @@ bool river::Interface::init(const std::string& _name,
} else if ( m_node->isOutput() == true } else if ( m_node->isOutput() == true
&& m_mode == river::modeInterface_output) { && m_mode == river::modeInterface_output) {
m_process.setInputConfig(drain::IOFormatInterface(map, _format, _freq)); m_process.setInputConfig(drain::IOFormatInterface(map, _format, _freq));
// add all time the volume stage : // Add volume only if the Low level has a volume (otherwise it will be added by the application)
std11::shared_ptr<drain::Volume> algo = drain::Volume::create();
//algo->setOutputFormat(m_node->getInterfaceFormat());
algo->setName("volume");
m_process.pushBack(algo);
RIVER_INFO("add basic volume stage (2)");
std11::shared_ptr<drain::VolumeElement> tmpVolume = m_node->getVolume(); std11::shared_ptr<drain::VolumeElement> tmpVolume = m_node->getVolume();
if (tmpVolume != nullptr) { if (tmpVolume != nullptr) {
// add all time the volume stage :
std11::shared_ptr<drain::Volume> algo = drain::Volume::create();
//algo->setOutputFormat(m_node->getInterfaceFormat());
algo->setName("volume");
m_process.pushBack(algo);
RIVER_INFO(" add volume for node"); RIVER_INFO(" add volume for node");
algo->addVolumeStage(tmpVolume); algo->addVolumeStage(tmpVolume);
} }
@ -88,13 +88,6 @@ bool river::Interface::init(const std::string& _name,
} else if ( m_node->isOutput() == true } else if ( m_node->isOutput() == true
&& m_mode == river::modeInterface_feedback) { && m_mode == river::modeInterface_feedback) {
m_process.setInputConfig(m_node->getHarwareFormat()); m_process.setInputConfig(m_node->getHarwareFormat());
/*
// add all time the volume stage :
std11::shared_ptr<drain::Volume> algo = drain::Volume::create();
//algo->setInputFormat(m_node->getInterfaceFormat());
algo->setName("volume");
m_process.pushBack(algo);
*/
// note : feedback has no volume stage ... // note : feedback has no volume stage ...
m_process.setOutputConfig(drain::IOFormatInterface(map, _format, _freq)); m_process.setOutputConfig(drain::IOFormatInterface(map, _format, _freq));
} else { } else {
@ -326,8 +319,15 @@ void river::Interface::addVolumeGroup(const std::string& _name) {
RIVER_DEBUG("addVolumeGroup(" << _name << ")"); RIVER_DEBUG("addVolumeGroup(" << _name << ")");
std11::shared_ptr<drain::Volume> algo = m_process.get<drain::Volume>("volume"); std11::shared_ptr<drain::Volume> algo = m_process.get<drain::Volume>("volume");
if (algo == nullptr) { if (algo == nullptr) {
RIVER_ERROR("addVolumeGroup(" << _name << ") ==> no volume stage ... can not add it ..."); m_process.removeAlgoDynamic();
return; // add all time the volume stage :
algo = drain::Volume::create();
algo->setName("volume");
if (m_node->isInput() == true) {
m_process.pushFront(algo);
} else {
m_process.pushBack(algo);
}
} }
if (_name == "FLOW") { if (_name == "FLOW") {
// Local volume name // Local volume name
@ -392,35 +392,32 @@ void river::Interface::generateDot(etk::FSNode& _node, const std::string& _nameI
_node << " subgraph clusterInterface_" << m_uid << " {\n"; _node << " subgraph clusterInterface_" << m_uid << " {\n";
_node << " color=orange;\n"; _node << " color=orange;\n";
_node << " label=\"[" << m_uid << "] Interface : " << m_name << "\";\n"; _node << " label=\"[" << m_uid << "] Interface : " << m_name << "\";\n";
std::string nameIn;
_node << " subgraph clusterInterface_" << m_uid << "_process {\n"; std::string nameOut;
_node << " label=\"Drain::Process\";\n";
_node << " node [shape=ellipse];\n";
_node << " INTERFACE_ALGO_" << m_uid << "_in [ label=\"format=" << etk::to_string(m_process.getInputConfig().getFormat())
<< "\\n freq=" << m_process.getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getInputConfig().getMap()) << "\\n in\" ];\n";
_node << " INTERFACE_ALGO_" << m_uid << "_out [ label=\"format=" << etk::to_string(m_process.getOutputConfig().getFormat())
<< "\\n freq=" << m_process.getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getOutputConfig().getMap()) << "\\n out\" ];\n";
_node << " }\n";
if ( m_mode == river::modeInterface_input if ( m_mode == river::modeInterface_input
|| m_mode == river::modeInterface_feedback) { || m_mode == river::modeInterface_feedback) {
link(_node, _nameIO, "->", "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_in", _isLink); m_process.generateDot(_node, 3, 10000+m_uid, nameIn, nameOut, false);
link(_node, "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_in", "->", "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_out");
} else { } else {
link(_node, _nameIO, "<-", "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_out", _isLink); m_process.generateDot(_node, 3, 10000+m_uid, nameIn, nameOut, true);
link(_node, "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_out", "<-", "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_in"); }
if ( m_mode == river::modeInterface_input
|| m_mode == river::modeInterface_feedback) {
link(_node, _nameIO, "->", nameIn, _isLink);
} else {
link(_node, _nameIO, "<-", nameOut, _isLink);
} }
_node << " node [shape=Mdiamond];\n"; _node << " node [shape=Mdiamond];\n";
if (m_mode == river::modeInterface_input) { if (m_mode == river::modeInterface_input) {
_node << " " << getDotNodeName() << " [ label=\"API\\nINPUT\" ];\n"; _node << " " << getDotNodeName() << " [ label=\"API\\nINPUT\" ];\n";
link(_node, "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_out", "->", getDotNodeName()); link(_node, nameOut, "->", getDotNodeName());
} else if (m_mode == river::modeInterface_feedback) { } else if (m_mode == river::modeInterface_feedback) {
_node << " " << getDotNodeName() << " [ label=\"API\\nFEEDBACK\" ];\n"; _node << " " << getDotNodeName() << " [ label=\"API\\nFEEDBACK\" ];\n";
link(_node, "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_out", "->", getDotNodeName()); link(_node, nameOut, "->", getDotNodeName());
} else if (m_mode == river::modeInterface_output) { } else if (m_mode == river::modeInterface_output) {
_node << " " << getDotNodeName() << " [ label=\"API\\nOUTPUT\" ];\n"; _node << " " << getDotNodeName() << " [ label=\"API\\nOUTPUT\" ];\n";
link(_node, "INTERFACE_ALGO_" + etk::to_string(m_uid) + "_in", "<-", getDotNodeName()); link(_node, nameIn, "<-", getDotNodeName());
} }
_node << " }\n \n"; _node << " }\n \n";
} }

View File

@ -269,39 +269,23 @@ void river::io::Node::generateDot(etk::FSNode& _node) {
if (m_isInput == true) { if (m_isInput == true) {
_node << " node [shape=rarrow];\n"; _node << " node [shape=rarrow];\n";
_node << " NODE_" << m_uid << "_HW_interface [ label=\"HW interface\\n interface=ALSA\\n stream=" << m_name << "\\n type=input\" ];\n"; _node << " NODE_" << m_uid << "_HW_interface [ label=\"HW interface\\n interface=ALSA\\n stream=" << m_name << "\\n type=input\" ];\n";
_node << " subgraph clusterNode_" << m_uid << "_process {\n"; std::string nameIn;
_node << " label=\"Drain::Process\";\n"; std::string nameOut;
_node << " node [shape=ellipse];\n"; m_process.generateDot(_node, 3, m_uid, nameIn, nameOut, false);
_node << " node_ALGO_" << m_uid << "_in [ label=\"format=" << etk::to_string(m_process.getInputConfig().getFormat())
<< "\\n freq=" << m_process.getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getInputConfig().getMap()) << "\" ];\n";
_node << " node_ALGO_" << m_uid << "_out [ label=\"format=" << etk::to_string(m_process.getOutputConfig().getFormat())
<< "\\n freq=" << m_process.getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getOutputConfig().getMap()) << "\" ];\n";
_node << " }\n";
_node << " node [shape=square];\n"; _node << " node [shape=square];\n";
_node << " NODE_" << m_uid << "_demuxer [ label=\"DEMUXER\\n format=" << etk::to_string(m_process.getOutputConfig().getFormat()) << "\" ];\n"; _node << " NODE_" << m_uid << "_demuxer [ label=\"DEMUXER\\n format=" << etk::to_string(m_process.getOutputConfig().getFormat()) << "\" ];\n";
// Link all nodes : // Link all nodes :
_node << " NODE_" << m_uid << "_HW_interface -> node_ALGO_" << m_uid << "_in [arrowhead=\"open\"];\n"; _node << " NODE_" << m_uid << "_HW_interface -> " << nameIn << " [arrowhead=\"open\"];\n";
_node << " node_ALGO_" << m_uid << "_in -> node_ALGO_" << m_uid << "_out [arrowhead=\"open\"];\n"; _node << " " << nameOut << " -> NODE_" << m_uid << "_demuxer [arrowhead=\"open\"];\n";
_node << " node_ALGO_" << m_uid << "_out -> NODE_" << m_uid << "_demuxer [arrowhead=\"open\"];\n";
} else { } else {
size_t nbOutput = getNumberOfInterfaceAvaillable(river::modeInterface_output); size_t nbOutput = getNumberOfInterfaceAvaillable(river::modeInterface_output);
size_t nbfeedback = getNumberOfInterfaceAvaillable(river::modeInterface_feedback); size_t nbfeedback = getNumberOfInterfaceAvaillable(river::modeInterface_feedback);
_node << " node [shape=larrow];\n"; _node << " node [shape=larrow];\n";
_node << " NODE_" << m_uid << "_HW_interface [ label=\"HW interface\\n interface=ALSA\\n stream=" << m_name << "\\n type=output\" ];\n"; _node << " NODE_" << m_uid << "_HW_interface [ label=\"HW interface\\n interface=ALSA\\n stream=" << m_name << "\\n type=output\" ];\n";
std::string nameIn;
std::string nameOut;
if (nbOutput>0) { if (nbOutput>0) {
_node << " subgraph clusterNode_" << m_uid << "_process {\n"; m_process.generateDot(_node, 3, m_uid, nameIn, nameOut, true);
_node << " label=\"Drain::Process\";\n";
_node << " node [shape=ellipse];\n";
_node << " node_ALGO_" << m_uid << "_out [ label=\"format=" << etk::to_string(m_process.getOutputConfig().getFormat())
<< "\\n freq=" << m_process.getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getOutputConfig().getMap()) << "\" ];\n";
_node << " node_ALGO_" << m_uid << "_in [ label=\"format=" << etk::to_string(m_process.getInputConfig().getFormat())
<< "\\n freq=" << m_process.getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getInputConfig().getMap()) << "\" ];\n";
_node << " }\n";
} }
_node << " node [shape=square];\n"; _node << " node [shape=square];\n";
if (nbOutput>0) { if (nbOutput>0) {
@ -312,9 +296,8 @@ void river::io::Node::generateDot(etk::FSNode& _node) {
} }
// Link all nodes : // Link all nodes :
if (nbOutput>0) { if (nbOutput>0) {
link(_node, "NODE_" + etk::to_string(m_uid) + "_HW_interface", "<-", "node_ALGO_" + etk::to_string(m_uid) + "_out"); link(_node, "NODE_" + etk::to_string(m_uid) + "_HW_interface", "<-", nameOut);
link(_node, "node_ALGO_" + etk::to_string(m_uid) + "_out", "<-", "node_ALGO_" + etk::to_string(m_uid) + "_in"); link(_node, nameIn, "<-", "NODE_" + etk::to_string(m_uid) + "_muxer");
link(_node, "node_ALGO_" + etk::to_string(m_uid) + "_in", "<-", "NODE_" + etk::to_string(m_uid) + "_muxer");
} }
if (nbfeedback>0) { if (nbfeedback>0) {
_node << " NODE_" << m_uid << "_HW_interface -> NODE_" << m_uid << "_demuxer [arrowhead=\"open\"];\n"; _node << " NODE_" << m_uid << "_HW_interface -> NODE_" << m_uid << "_demuxer [arrowhead=\"open\"];\n";

View File

@ -281,8 +281,8 @@ void river::io::NodeMuxer::process() {
//RIVER_INFO(" process 256 samples ... in1Time=" << in1Time << " in2Time=" << in2Time << " delta = " << (in1Time-in2Time).count()); //RIVER_INFO(" process 256 samples ... in1Time=" << in1Time << " in2Time=" << in2Time << " delta = " << (in1Time-in2Time).count());
m_bufferInput1.read(&dataIn1[0], 256); m_bufferInput1.read(&dataIn1[0], 256);
m_bufferInput2.read(&dataIn2[0], 256); m_bufferInput2.read(&dataIn2[0], 256);
RIVER_SAVE_FILE_MACRO(int16_t, "REC_INPUT1.raw", &dataIn1[0], 256 * m_mapInput1.size()); //RIVER_SAVE_FILE_MACRO(int16_t, "REC_INPUT1.raw", &dataIn1[0], 256 * m_mapInput1.size());
RIVER_SAVE_FILE_MACRO(int16_t, "REC_INPUT2.raw", &dataIn2[0], 256 * m_mapInput2.size()); //RIVER_SAVE_FILE_MACRO(int16_t, "REC_INPUT2.raw", &dataIn2[0], 256 * m_mapInput2.size());
// if threaded : send event / otherwise, process ... // if threaded : send event / otherwise, process ...
processMuxer(&dataIn1[0], &dataIn2[0], 256, in1Time); processMuxer(&dataIn1[0], &dataIn2[0], 256, in1Time);
if ( m_bufferInput1.getSize() <= 256 if ( m_bufferInput1.getSize() <= 256
@ -437,23 +437,14 @@ void river::io::NodeMuxer::generateDot(etk::FSNode& _node) {
_node << " node [shape=box];\n"; _node << " node [shape=box];\n";
// TODO : Create a structure ... // TODO : Create a structure ...
_node << " NODE_" << m_uid << "_HW_MUXER [ label=\"Muxer\\n channelMap=" << etk::to_string(getInterfaceFormat().getMap()) << "\" ];\n"; _node << " NODE_" << m_uid << "_HW_MUXER [ label=\"Muxer\\n channelMap=" << etk::to_string(getInterfaceFormat().getMap()) << "\" ];\n";
_node << " subgraph clusterNode_" << m_uid << "_process {\n"; std::string nameIn;
_node << " label=\"Drain::Process\";\n"; std::string nameOut;
_node << " node [shape=ellipse];\n"; m_process.generateDot(_node, 3, m_uid, nameIn, nameOut, false);
_node << " node_ALGO_" << m_uid << "_in [ label=\"format=" << etk::to_string(m_process.getInputConfig().getFormat())
<< "\\n freq=" << m_process.getInputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getInputConfig().getMap()) << "\" ];\n";
_node << " node_ALGO_" << m_uid << "_out [ label=\"format=" << etk::to_string(m_process.getOutputConfig().getFormat())
<< "\\n freq=" << m_process.getOutputConfig().getFrequency()
<< "\\n channelMap=" << etk::to_string(m_process.getOutputConfig().getMap()) << "\" ];\n";
_node << " }\n";
_node << " node [shape=square];\n"; _node << " node [shape=square];\n";
_node << " NODE_" << m_uid << "_demuxer [ label=\"DEMUXER\\n format=" << etk::to_string(m_process.getOutputConfig().getFormat()) << "\" ];\n"; _node << " NODE_" << m_uid << "_demuxer [ label=\"DEMUXER\\n format=" << etk::to_string(m_process.getOutputConfig().getFormat()) << "\" ];\n";
// Link all nodes : // Link all nodes :
_node << " NODE_" << m_uid << "_HW_MUXER -> node_ALGO_" << m_uid << "_in;\n"; _node << " NODE_" << m_uid << "_HW_MUXER -> " << nameIn << ";\n";
_node << " node_ALGO_" << m_uid << "_in -> node_ALGO_" << m_uid << "_out;\n"; _node << " " << nameOut << " -> NODE_" << m_uid << "_demuxer;\n";
_node << " node_ALGO_" << m_uid << "_out -> NODE_" << m_uid << "_demuxer;\n";
_node << " }\n"; _node << " }\n";
if (m_interfaceInput2 != nullptr) { if (m_interfaceInput2 != nullptr) {
_node << " " << m_interfaceInput2->getDotNodeName() << " -> NODE_" << m_uid << "_HW_MUXER;\n"; _node << " " << m_interfaceInput2->getDotNodeName() << " -> NODE_" << m_uid << "_HW_MUXER;\n";
@ -462,14 +453,27 @@ void river::io::NodeMuxer::generateDot(etk::FSNode& _node) {
_node << " " << m_interfaceInput1->getDotNodeName() << " -> NODE_" << m_uid << "_HW_MUXER;\n"; _node << " " << m_interfaceInput1->getDotNodeName() << " -> NODE_" << m_uid << "_HW_MUXER;\n";
} }
_node << " \n"; _node << " \n";
for (size_t iii=0; iii<m_list.size(); ++iii) { for (size_t iii=0; iii< m_listAvaillable.size(); ++iii) {
if (m_list[iii] != nullptr) { if (m_listAvaillable[iii].expired() == true) {
if (m_list[iii]->getMode() == modeInterface_input) { continue;
m_list[iii]->generateDot(_node, "NODE_" + etk::to_string(m_uid) + "_demuxer"); }
} else if (m_list[iii]->getMode() == modeInterface_output) { std11::shared_ptr<river::Interface> element = m_listAvaillable[iii].lock();
m_list[iii]->generateDot(_node, "NODE_" + etk::to_string(m_uid) + "_muxer"); if (element == nullptr) {
} else if (m_list[iii]->getMode() == modeInterface_feedback) { continue;
m_list[iii]->generateDot(_node, "NODE_" + etk::to_string(m_uid) + "_demuxer"); }
bool isLink = false;
for (size_t jjj=0; jjj<m_list.size(); ++jjj) {
if (element == m_list[jjj]) {
isLink = true;
}
}
if (element != nullptr) {
if (element->getMode() == modeInterface_input) {
element->generateDot(_node, "NODE_" + etk::to_string(m_uid) + "_demuxer", isLink);
} else if (element->getMode() == modeInterface_output) {
element->generateDot(_node, "NODE_" + etk::to_string(m_uid) + "_muxer", isLink);
} else if (element->getMode() == modeInterface_feedback) {
element->generateDot(_node, "NODE_" + etk::to_string(m_uid) + "_demuxer", isLink);
} else { } else {
} }