MistInHLS improvements and speedups, part 3/2
This commit is contained in:
parent
26746c139d
commit
382e1eec03
3 changed files with 32 additions and 5 deletions
28
lib/dtsc.cpp
28
lib/dtsc.cpp
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue