diff --git a/components/streams/include/ftl/streams/stream.hpp b/components/streams/include/ftl/streams/stream.hpp index 1a0a1793e8ae4ca008bf1e19171d835433189d3c..ead565f13e20cb74a668d3b7b53d708a9a97f066 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 95a15f6688eeb7d65e0e0b2b0aadeaa394d67896..3c06ece80784019af43524c6491a286aa844ce99 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 c80f9f284dac34ec5770cd73177ebd72db0d60f9..9e66f165b110f357727cc21958b8352432bd6749 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();