MistInHLS improvements and speedups, part 3/2

This commit is contained in:
Marco van Dijk 2023-11-01 12:26:36 +01:00 committed by Thulinma
parent 26746c139d
commit 382e1eec03
3 changed files with 32 additions and 5 deletions

View file

@ -2285,6 +2285,34 @@ namespace DTSC{
// Note: pages are not deleted here, but instead deleted by Input::removeUnused (or a child-override) // Note: pages are not deleted here, but instead deleted by Input::removeUnused (or a child-override)
// This is fine, as pages can (and will, at least temporarily) exist for data we no longer fully have in stream metadata // This is fine, as pages can (and will, at least temporarily) exist for data we no longer fully have in stream metadata
setFirstms(trackIdx, t.keys.getInt(t.keyTimeField, t.keys.getDeleted())); setFirstms(trackIdx, t.keys.getInt(t.keyTimeField, t.keys.getDeleted()));
// Update page info
Util::RelAccX &tPages = pages(trackIdx);
uint32_t firstPage = tPages.getDeleted();
uint32_t keyCount = tPages.getInt("keycount", firstPage);
uint32_t firstKey = tPages.getInt("firstkey", firstPage);
// Delete the page if this was the last key
if (firstKey + keyCount <= deletedKeyNum + 1){
if (tPages.getInt("avail", firstPage)){
// Open the correct page
char pageId[NAME_BUFFER_SIZE];
snprintf(pageId, NAME_BUFFER_SIZE, SHM_TRACK_DATA, streamName.c_str(), trackIdx, firstKey);
std::string pageName(pageId);
IPC::sharedPage toErase;
toErase.init(pageName, 0, false, false);
// Set the master flag so that the page will be destroyed once it leaves scope
#if defined(__CYGWIN__) || defined(_WIN32)
IPC::releasePage(pageName);
#endif
toErase.master = true;
}
tPages.deleteRecords(1);
} else if (tPages.getInt("avail", firstPage) == 0){
tPages.setInt("keycount", keyCount - 1, firstPage);
tPages.setInt("parts", tPages.getInt("parts", firstPage) - deletedPartCount, firstPage);
tPages.setInt("firstkey", deletedKeyNum + 1, firstPage);
}
if (resizeLock){resizeLock.unlink();} if (resizeLock){resizeLock.unlink();}
return true; return true;
} }

View file

@ -1179,7 +1179,7 @@ namespace Mist{
while (true) { while (true) {
DTSC::Keys keys = M.getKeys(trackIdx->first); DTSC::Keys keys = M.getKeys(trackIdx->first);
// Stop if the earliest key is still in the playlist // Stop if the earliest key is still in the playlist
if (listEntries[currentPlaylist].front().bytePos < keys.getBpos(keys.getFirstValid())){ if (listEntries[currentPlaylist].front().bytePos <= keys.getBpos(keys.getFirstValid())){
break; break;
} }
// Stop if earliest key is still in the buffer window // Stop if earliest key is still in the buffer window
@ -1403,10 +1403,10 @@ namespace Mist{
playListEntries &entry = curPlaylist.at(currentIndex); playListEntries &entry = curPlaylist.at(currentIndex);
segDowner.loadSegment(entry); segDowner.loadSegment(entry);
// If we have an offset, load it // If we have an offset, load it
allowRemap = false;
if (entry.timeOffset){ if (entry.timeOffset){
HIGH_MSG("Setting time offset of this TS segment to %" PRId64, entry.timeOffset); HIGH_MSG("Setting time offset of this TS segment to %" PRId64, entry.timeOffset);
plsTimeOffset[currentPlaylist] = entry.timeOffset; plsTimeOffset[currentPlaylist] = entry.timeOffset;
allowRemap = false;
} }
} }
@ -1763,14 +1763,13 @@ namespace Mist{
ERROR_MSG("Could not download segment: %s", ntry.filename.c_str()); ERROR_MSG("Could not download segment: %s", ntry.filename.c_str());
return readNextFile(); // Attempt to read another, if possible. return readNextFile(); // Attempt to read another, if possible.
} }
allowRemap = false;
// If we have an offset, load it // If we have an offset, load it
if (ntry.timeOffset){ if (ntry.timeOffset){
plsTimeOffset[currentPlaylist] = ntry.timeOffset; plsTimeOffset[currentPlaylist] = ntry.timeOffset;
allowRemap = false;
// Else allow of the offset to be set by getPacketTime // Else allow of the offset to be set by getPacketTime
}else{ }else{
nUTC = ntry.mUTC; nUTC = ntry.mUTC;
allowRemap = true;
} }
return true; return true;
} }

View file

@ -149,7 +149,7 @@ namespace Mist{
} }
// If the given pagenumber is not a valid page on this track, do nothing // If the given pagenumber is not a valid page on this track, do nothing
if (pageIdx == INVALID_KEY_NUM){ if (pageIdx == INVALID_KEY_NUM){
WARN_MSG("Can't remove page %" PRIu32 " on track %zu as it is not a valid page number.", pageNumber, idx); INFO_MSG("Can't remove page %" PRIu32 " on track %zu as the page has already been unloaded", pageNumber, idx);
return; return;
} }