Skip to content

Commit 4cf8ffa

Browse files
committed
Request the next event with some extra time
1 parent 5abda2a commit 4cf8ffa

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

src/subtitles-octopus.js

+19-3
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ var SubtitlesOctopus = function (options) {
5656
iteration: 0,
5757
renderRequested: false,
5858
requestNextTimestamp: -1,
59+
requestOffset: 0,
5960
prevWidth: null,
6061
prevHeight: null
6162
}
@@ -207,6 +208,7 @@ var SubtitlesOctopus = function (options) {
207208
self.video.addEventListener("timeupdate", timeupdate, false);
208209
self.setCurrentTime(video.currentTime + self.timeOffset);
209210
if (self.renderAhead > 0) {
211+
self.oneshotState.requestOffset = 0;
210212
_cleanPastRendered(video.currentTime + self.timeOffset, true);
211213
}
212214
}, false);
@@ -380,13 +382,23 @@ var SubtitlesOctopus = function (options) {
380382
if (!self.video) return;
381383

382384
var currentTime = self.video.currentTime + self.timeOffset;
385+
var nextTime = currentTime + self.oneshotState.requestOffset;
386+
387+
// request the next event with some extra time, because we won't get it instantly
388+
self.oneshotState.requestOffset = self.video.playbackRate / self.targetFps;
389+
383390
var eventToShow = null;
384391
var finishTime = -1, animated = false;
385392
for (var i = 0, len = self.renderedItems.length; i < len; i++) {
386393
var item = self.renderedItems[i];
394+
387395
// we need the last started event
388396
if (item.eventStart <= currentTime) {
389397
eventToShow = item;
398+
}
399+
400+
// we need to find a series of events from the request time
401+
if (item.eventStart <= nextTime) {
390402
finishTime = item.emptyFinish;
391403
} else if (finishTime >= 0) {
392404
// we've already found a known event, now find
@@ -405,11 +417,13 @@ var SubtitlesOctopus = function (options) {
405417
_renderSubtitleEvent(eventToShow, currentTime);
406418

407419
if (_cleanPastRendered(currentTime) && finishTime >= 0) {
408-
tryRequestOneshot(finishTime, animated);
420+
// request the next event from the most distant time (the next frame or the end of events in the series)
421+
nextTime = Math.max(finishTime, nextTime);
422+
tryRequestOneshot(nextTime, nextTime === finishTime ? animated : true);
409423
}
410-
} else if (Math.abs(self.oneshotState.requestNextTimestamp - currentTime) > EVENTTIME_ULP) {
424+
} else if (Math.abs(self.oneshotState.requestNextTimestamp - nextTime) > EVENTTIME_ULP) {
411425
_cleanPastRendered(currentTime);
412-
tryRequestOneshot(currentTime, true);
426+
tryRequestOneshot(nextTime, true);
413427
}
414428
}
415429

@@ -831,6 +845,8 @@ var SubtitlesOctopus = function (options) {
831845
self.render = self.setCurrentTime;
832846

833847
self.setIsPaused = function (isPaused, currentTime) {
848+
self.oneshotState.requestOffset = 0;
849+
834850
self.worker.postMessage({
835851
target: 'video',
836852
isPaused: isPaused,

0 commit comments

Comments
 (0)