From 69c74aa1030bad2b1e91e2609c8a02dc4a9d742a Mon Sep 17 00:00:00 2001 From: brunoherbelin Date: Fri, 25 Sep 2020 22:03:31 +0200 Subject: [PATCH] Save & Load Device Source. --- DeviceSource.cpp | 7 ++++--- SessionCreator.cpp | 11 +++++++++++ SessionCreator.h | 1 + SessionVisitor.cpp | 7 +++++++ SessionVisitor.h | 1 + 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/DeviceSource.cpp b/DeviceSource.cpp index 4753aaa..d8241d0 100644 --- a/DeviceSource.cpp +++ b/DeviceSource.cpp @@ -221,10 +221,11 @@ void DeviceSource::setDevice(const std::string &devicename) // test the device and get config DeviceConfigSet confs = Device::manager().config(index); - // for( DeviceInfoSet::iterator it = confs.begin(); it != confs.end(); it++ ){ - // Log::Info("config possible : %s %dx%d @ %d fps", (*it).format.c_str(), (*it).width, (*it).height, (*it).fps_numerator); - // } +// for( DeviceConfigSet::iterator it = confs.begin(); it != confs.end(); it++ ){ +// Log::Info("config possible : %s %dx%d @ %d fps", (*it).format.c_str(), (*it).width, (*it).height, (*it).fps_numerator); +// } DeviceConfigSet::reverse_iterator best = confs.rbegin(); + Log::Info("Auto select optimal config for '%s': %s %dx%d @ %d fps", device_.c_str(), (*best).format.c_str(), (*best).width, (*best).height, (*best).fps_numerator); pipeline << " ! " << (*best).format; pipeline << ",framerate=" << (*best).fps_numerator << "/" << (*best).fps_denominator; diff --git a/SessionCreator.cpp b/SessionCreator.cpp index 42a5870..8229781 100644 --- a/SessionCreator.cpp +++ b/SessionCreator.cpp @@ -118,6 +118,11 @@ void SessionCreator::loadSession(XMLElement *sessionNode) new_pattern_source->accept(*this); session_->addSource(new_pattern_source); } + else if ( std::string(pType) == "DeviceSource") { + DeviceSource *new_pattern_source = new DeviceSource; + new_pattern_source->accept(*this); + session_->addSource(new_pattern_source); + } // TODO : create other types of source } @@ -348,5 +353,11 @@ void SessionCreator::visit (PatternSource& s) s.setPattern(p, resolution); } +void SessionCreator::visit (DeviceSource& s) +{ + const char *devname = xmlCurrent_->Attribute("device"); + s.setDevice(devname); +} + diff --git a/SessionCreator.h b/SessionCreator.h index b12795a..625ce5b 100644 --- a/SessionCreator.h +++ b/SessionCreator.h @@ -49,6 +49,7 @@ public: void visit (MediaSource& s) override; void visit (SessionSource& s) override; void visit (PatternSource& s) override; + void visit (DeviceSource& s) override; static std::string info(const std::string& filename); static void XMLToNode(tinyxml2::XMLElement *xml, Node &n); diff --git a/SessionVisitor.cpp b/SessionVisitor.cpp index 83523eb..6835d2c 100644 --- a/SessionVisitor.cpp +++ b/SessionVisitor.cpp @@ -8,6 +8,7 @@ #include "MediaSource.h" #include "SessionSource.h" #include "PatternSource.h" +#include "DeviceSource.h" #include "ImageShader.h" #include "ImageProcessingShader.h" #include "MediaPlayer.h" @@ -390,3 +391,9 @@ void SessionVisitor::visit (PatternSource& s) resolution->InsertEndChild( XMLElementFromGLM(xmlDoc_, s.pattern()->resolution() ) ); xmlCurrent_->InsertEndChild(resolution); } + +void SessionVisitor::visit (DeviceSource& s) +{ + xmlCurrent_->SetAttribute("type", "DeviceSource"); + xmlCurrent_->SetAttribute("device", s.device().c_str() ); +} diff --git a/SessionVisitor.h b/SessionVisitor.h index e071225..5f5ad1c 100644 --- a/SessionVisitor.h +++ b/SessionVisitor.h @@ -45,6 +45,7 @@ public: void visit (RenderSource& s) override; void visit (CloneSource& s) override; void visit (PatternSource& s) override; + void visit (DeviceSource& s) override; static tinyxml2::XMLElement *NodeToXML(Node &n, tinyxml2::XMLDocument *doc); };