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