diff --git a/applications/tools/simple_viewer/main.cpp b/applications/tools/simple_viewer/main.cpp index ae7fd54cc253796a60d6a3a73b8a6b24085ae5f1..ba8f1435cbeb09d5cdb4ace3764d22da69a3da87 100644 --- a/applications/tools/simple_viewer/main.cpp +++ b/applications/tools/simple_viewer/main.cpp @@ -88,6 +88,8 @@ static void run(ftl::Configurable *root) { std::list<ftl::Handle> handles; ftl::data::Pool pool(2,10); + std::list<ftl::data::Generator*> generators; + // Check paths for FTL files to load. auto paths = (*root->get<nlohmann::json>("paths")); int i = 0; //groups.size(); @@ -99,25 +101,57 @@ static void run(ftl::Configurable *root) { // Command line path is ftl file if (ext == "ftl") { auto *gen = createFileGenerator(root, &pool, path); + generators.push_back(gen); + ++i; + } else { + ftl::URI uri(path); + if (uri.getScheme() == ftl::URI::SCHEME_TCP || uri.getScheme() == ftl::URI::SCHEME_WS) { + net->connect(path)->waitConnection(); + } + } + } - handles.push_back(std::move(gen->onFrameSet([&](std::shared_ptr<ftl::data::FrameSet> fs) { - - LOG(INFO) << "Got frameset: " << fs->timestamp(); - for (auto &f : fs->frames) { - if (f.has(Channel::Colour)) { - cv::Mat tmp; - f.get<cv::cuda::GpuMat>(Channel::Colour).download(tmp); - cv::imshow(std::string("Frame")+std::to_string(f.id().id), tmp); - } - } + auto stream_uris = net->findAll<std::string>("list_streams"); + + if (stream_uris.size() > 0) { + ftl::stream::Muxer *stream = ftl::create<ftl::stream::Muxer>(root, "muxstream"); + ftl::stream::Receiver *gen = ftl::create<ftl::stream::Receiver>(root, "receiver", &pool); + gen->setStream(stream); + + //sender->onRequest([stream](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) { + // if (spkt.channel == Channel::Colour) { + // stream->reset(); + // } + //}); + + int count = 0; + for (auto &s : stream_uris) { + LOG(INFO) << " --- found stream: " << s; + auto *nstream = ftl::create<ftl::stream::Net>(stream, std::string("netstream")+std::to_string(count), net); + nstream->set("uri", s); + stream->add(nstream); + ++count; + } - cv::waitKey(1); + generators.push_back(gen); + stream->begin(); + } - return true; - }))); + for (auto *g : generators) { + handles.push_back(std::move(g->onFrameSet([&](std::shared_ptr<ftl::data::FrameSet> fs) { + LOG(INFO) << "Got frameset: " << fs->timestamp(); + for (auto &f : fs->frames) { + if (f.has(Channel::Colour)) { + cv::Mat tmp; + f.get<cv::cuda::GpuMat>(Channel::Colour).download(tmp); + cv::imshow(std::string("Frame")+std::to_string(f.id().id), tmp); + } + } - ++i; - } + cv::waitKey(1); + + return true; + }))); } LOG(INFO) << "Start timer";