From d5092b1765173df4b5d6f589a46aa2df62b1d67b Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Fri, 31 Dec 2021 13:30:51 +0100 Subject: [PATCH] Save & load GenericStrreamSource --- SessionCreator.cpp | 17 +++++++++++++++++ SessionCreator.h | 1 + SessionVisitor.cpp | 13 +++++++++++++ SessionVisitor.h | 1 + StreamSource.cpp | 2 +- StreamSource.h | 2 +- 6 files changed, 34 insertions(+), 2 deletions(-) diff --git a/SessionCreator.cpp b/SessionCreator.cpp index 9896b9d..fb17430 100644 --- a/SessionCreator.cpp +++ b/SessionCreator.cpp @@ -32,6 +32,7 @@ #include "DeviceSource.h" #include "NetworkSource.h" #include "MultiFileSource.h" +#include "StreamSource.h" #include "Session.h" #include "ImageShader.h" #include "ImageProcessingShader.h" @@ -346,6 +347,9 @@ void SessionLoader::load(XMLElement *sessionNode) else if ( std::string(pType) == "MultiFileSource") { load_source = new MultiFileSource(id_xml_); } + else if ( std::string(pType) == "GenericStreamSource") { + load_source = new GenericStreamSource(id_xml_); + } // skip failed (including clones) if (!load_source) @@ -471,6 +475,9 @@ Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, Mode mode) else if ( std::string(pType) == "MultiFileSource") { load_source = new MultiFileSource(id__); } + else if ( std::string(pType) == "GenericStreamSource") { + load_source = new GenericStreamSource(id__); + } else if ( std::string(pType) == "CloneSource") { // clone from given origin XMLElement* originNode = xmlCurrent_->FirstChildElement("origin"); @@ -1063,4 +1070,14 @@ void SessionLoader::visit (MultiFileSource& s) } +void SessionLoader::visit (GenericStreamSource& s) +{ + XMLElement* desc = xmlCurrent_->FirstChildElement("Description"); + + if (desc) { + const char * text = desc->GetText(); + if (text) + s.setDescription(text); + } +} diff --git a/SessionCreator.h b/SessionCreator.h index 4cde17c..f2cb582 100644 --- a/SessionCreator.h +++ b/SessionCreator.h @@ -59,6 +59,7 @@ public: void visit (DeviceSource& s) override; void visit (NetworkSource& s) override; void visit (MultiFileSource& s) override; + void visit (GenericStreamSource& s) override; static void XMLToNode(const tinyxml2::XMLElement *xml, Node &n); static void XMLToSourcecore(tinyxml2::XMLElement *xml, SourceCore &s); diff --git a/SessionVisitor.cpp b/SessionVisitor.cpp index 213e44f..da472b9 100644 --- a/SessionVisitor.cpp +++ b/SessionVisitor.cpp @@ -703,6 +703,19 @@ void SessionVisitor::visit (MultiFileSource& s) xmlCurrent_->InsertEndChild(sequence); } + +void SessionVisitor::visit (GenericStreamSource& s) +{ + xmlCurrent_->SetAttribute("type", "GenericStreamSource"); + + XMLElement *desc = xmlDoc_->NewElement("Description"); + + XMLText *text = xmlDoc_->NewText( s.description().c_str() ); + desc->InsertEndChild( text ); + + xmlCurrent_->InsertEndChild(desc); +} + std::string SessionVisitor::getClipboard(const SourceList &list) { std::string x = ""; diff --git a/SessionVisitor.h b/SessionVisitor.h index d447c67..22724ef 100644 --- a/SessionVisitor.h +++ b/SessionVisitor.h @@ -66,6 +66,7 @@ public: void visit (NetworkSource& s) override; void visit (MixingGroup& s) override; void visit (MultiFileSource& s) override; + void visit (GenericStreamSource& s) override; static tinyxml2::XMLElement *NodeToXML(const Node &n, tinyxml2::XMLDocument *doc); static tinyxml2::XMLElement *ImageToXML(const FrameBufferImage *img, tinyxml2::XMLDocument *doc); diff --git a/StreamSource.cpp b/StreamSource.cpp index 1bc52b0..0847c39 100644 --- a/StreamSource.cpp +++ b/StreamSource.cpp @@ -33,7 +33,7 @@ #include "StreamSource.h" -GenericStreamSource::GenericStreamSource() : StreamSource() +GenericStreamSource::GenericStreamSource(uint64_t id) : StreamSource(id) { // create stream stream_ = new Stream; diff --git a/StreamSource.h b/StreamSource.h index eb788ef..870e476 100644 --- a/StreamSource.h +++ b/StreamSource.h @@ -63,7 +63,7 @@ class GenericStreamSource : public StreamSource std::list gst_elements_; public: - GenericStreamSource(); + GenericStreamSource(uint64_t id = 0); // Source interface void accept (Visitor& v) override;