From 4329a61575e302675b60d689cc7488d129fba449 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Wed, 15 Jul 2020 18:17:47 +0300 Subject: [PATCH] WIP Fix loading of multiple ftl files --- components/streams/include/ftl/streams/stream.hpp | 2 +- components/streams/src/filestream.cpp | 1 + components/streams/src/stream.cpp | 9 +++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/components/streams/include/ftl/streams/stream.hpp b/components/streams/include/ftl/streams/stream.hpp index 1a0a1793e..ead565f13 100644 --- a/components/streams/include/ftl/streams/stream.hpp +++ b/components/streams/include/ftl/streams/stream.hpp @@ -147,7 +147,7 @@ class Muxer : public Stream { SHARED_MUTEX mutex_; void _notify(const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt); - int _lookup(size_t fsid, int sid, int ssid); + int _lookup(size_t fsid, int sid, int ssid, int count); }; /** diff --git a/components/streams/src/filestream.cpp b/components/streams/src/filestream.cpp index 95a15f668..3c06ece80 100644 --- a/components/streams/src/filestream.cpp +++ b/components/streams/src/filestream.cpp @@ -346,6 +346,7 @@ bool File::run() { } bool File::begin(bool dorun) { + if (active_) return true; if (mode_ == Mode::Read) { if (!checked_) _checkFile(); _open(); diff --git a/components/streams/src/stream.cpp b/components/streams/src/stream.cpp index c80f9f284..9e66f165b 100644 --- a/components/streams/src/stream.cpp +++ b/components/streams/src/stream.cpp @@ -95,7 +95,7 @@ void Muxer::add(Stream *s, size_t fsid) { spkt2.streamID = fsid; if (spkt2.frame_number < 255) { - int id = _lookup(fsid, i, spkt.frame_number); + int id = _lookup(fsid, i, spkt.frame_number, pkt.frame_count); spkt2.frame_number = id; } @@ -168,7 +168,7 @@ void Muxer::reset() { } } -int Muxer::_lookup(size_t fsid, int sid, int ssid) { +int Muxer::_lookup(size_t fsid, int sid, int ssid, int count) { SHARED_LOCK(mutex_, lk); auto &se = streams_[sid]; if (static_cast<uint32_t>(ssid) >= se.maps.size()) { @@ -179,6 +179,11 @@ int Muxer::_lookup(size_t fsid, int sid, int ssid) { int nid = nid_[fsid]++; revmap_[fsid].push_back({sid, static_cast<uint32_t>(se.maps.size())}); se.maps.push_back(nid); + for (int i=1; i<count; ++i) { + int nid = nid_[fsid]++; + revmap_[fsid].push_back({sid, static_cast<uint32_t>(se.maps.size())}); + se.maps.push_back(nid); + } } } lk.lock(); -- GitLab