From d2880e1b8af8bf37021f26ecf4f0223693e067aa Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 15 May 2022 14:45:58 +0300 Subject: [PATCH] Fix RenderAhead buffering after resize After resetting, the next `tryRequestOneshot` may be "eaten" by an already existing (in the cache) event, and it won't be called in `oneshotRender` either, since the cache won't be freed there (it was reset here). --- src/subtitles-octopus.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/subtitles-octopus.js b/src/subtitles-octopus.js index 8feb0d1d..381b9677 100644 --- a/src/subtitles-octopus.js +++ b/src/subtitles-octopus.js @@ -60,6 +60,7 @@ var SubtitlesOctopus = function (options) { renderRequested: false, requestNextTimestamp: -1, nextRequestOffset: 0, // Next request offset, s + restart: true, prevWidth: null, prevHeight: null } @@ -467,9 +468,12 @@ var SubtitlesOctopus = function (options) { var freed = !self.video.paused && _cleanPastRendered(currentTime); - if ((freed || !eventToShow) && nextTime >= 0 && Math.abs(self.oneshotState.requestNextTimestamp - nextTime) > EVENTTIME_ULP) { + if ((freed || !eventToShow || self.oneshotState.restart) + && nextTime >= 0 && Math.abs(self.oneshotState.requestNextTimestamp - nextTime) > EVENTTIME_ULP) { tryRequestOneshot(nextTime, nextTime === finishTime ? animated : true); } + + self.oneshotState.restart = false; } function stopOneshotRender() { @@ -512,6 +516,12 @@ var SubtitlesOctopus = function (options) { self.oneshotState.prevWidth = targetWidth; self.oneshotState.nextRequestOffset = 0; + // After resetting, the next `tryRequestOneshot` may be "eaten" by + // an already existing (in the cache) event, and it won't be called + // in `oneshotRender` either, since the cache won't be freed there + // (it was reset here). + self.oneshotState.restart = true; + if (!isResizing) { self.oneshotState.displayedEvent = null; }