Skip to content

Commit c565f94

Browse files
JustAMandmitrylyzo
authored andcommitted
Handle resizing more efficiently - if video changed less than 20% keep using old size
Cherry-picked from: jellyfin@825c999
1 parent 91f7864 commit c565f94

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/subtitles-octopus.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ var SubtitlesOctopus = function (options) {
4646
eventOver: false,
4747
iteration: 0,
4848
renderRequested: false,
49-
requestNextTimestamp: -1
49+
requestNextTimestamp: -1,
50+
prevWidth: null,
51+
prevHeight: null
5052
}
5153

5254
self.hasAlphaBug = false;
@@ -391,11 +393,27 @@ var SubtitlesOctopus = function (options) {
391393

392394
function resetRenderAheadCache() {
393395
if (self.renderAhead > 0) {
396+
if (self.oneshotState.prevHeight && self.oneshotState.prevWidth) {
397+
if (self.canvas.height >= self.oneshotState.prevHeight * 0.8 &&
398+
self.canvas.height <= self.oneshotState.prevHeight * 1.2 &&
399+
self.canvas.width >= self.oneshotState.prevWidth * 0.8 &&
400+
self.canvas.width <= self.oneshotState.prevWidth * 1.2) {
401+
console.debug('not resetting prerender cache - keep using current');
402+
// keep rendering canvas size the same,
403+
// otherwise subtitles got placed incorrectly
404+
self.canvas.width = self.oneshotState.prevWidth;
405+
self.canvas.height = self.oneshotState.prevHeight;
406+
return;
407+
}
408+
}
409+
394410
console.info('resetting prerender cache');
395411
self.renderedItems = [];
396412
self.oneshotState.eventStart = null;
397413
self.oneshotState.iteration++;
398414
self.oneshotState.renderRequested = false;
415+
self.oneshotState.prevHeight = self.canvas.height;
416+
self.oneshotState.prevWidth = self.canvas.width;
399417

400418
window.requestAnimationFrame(oneshotRender);
401419
tryRequestOneshot(undefined, true);

0 commit comments

Comments
 (0)