whitespace
This commit is contained in:
parent
afaf65a53d
commit
0e3b962a00
@ -8,7 +8,7 @@ import Settings from '../Settings';
|
|||||||
// računa vrednosti za transform-scale (x, y)
|
// računa vrednosti za transform-scale (x, y)
|
||||||
// transform: scale(x,y) se uporablja za raztegovanje videa, ne pa za približevanje
|
// transform: scale(x,y) se uporablja za raztegovanje videa, ne pa za približevanje
|
||||||
// calculates values for transform scale(x, y)
|
// calculates values for transform scale(x, y)
|
||||||
// transform: scale(x,y) is used for stretching, not zooming.
|
// transform: scale(x,y) is used for stretching, not zooming.
|
||||||
|
|
||||||
class Stretcher {
|
class Stretcher {
|
||||||
//#region flags
|
//#region flags
|
||||||
@ -83,11 +83,11 @@ class Stretcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
calculateBasicStretch() {
|
calculateBasicStretch() {
|
||||||
// video.videoWidth in video.videoHeight predstavljata velikost datoteke.
|
// video.videoWidth in video.videoHeight predstavljata velikost datoteke.
|
||||||
// velikost video datoteke je lahko drugačna kot velikost <video> elementa.
|
// velikost video datoteke je lahko drugačna kot velikost <video> elementa.
|
||||||
// Zaradi tega lahko pride do te situacije:
|
// Zaradi tega lahko pride do te situacije:
|
||||||
// * Ločljivost videa je 850x480 (videoWidth & videoHeight)
|
// * Ločljivost videa je 850x480 (videoWidth & videoHeight)
|
||||||
// * Velikost <video> značke je 1920x720.
|
// * Velikost <video> značke je 1920x720.
|
||||||
// Znotraj te video značke bo video prikazan v 1280x720 pravokotniku. Raztegovanje
|
// Znotraj te video značke bo video prikazan v 1280x720 pravokotniku. Raztegovanje
|
||||||
// torej hočemo računati z uporabo vrednosti 1280 in 720. Teh vrednosti pa ne
|
// torej hočemo računati z uporabo vrednosti 1280 in 720. Teh vrednosti pa ne
|
||||||
// poznamo. Torej jih moramo računati.
|
// poznamo. Torej jih moramo računati.
|
||||||
@ -98,7 +98,7 @@ class Stretcher {
|
|||||||
// This can leave us with the following situation:
|
// This can leave us with the following situation:
|
||||||
// * Video resolution is 850x480-ish (as reported by videoWidth and videoHeight)
|
// * Video resolution is 850x480-ish (as reported by videoWidth and videoHeight)
|
||||||
// * Size of the <video> tag is 1920x720
|
// * Size of the <video> tag is 1920x720
|
||||||
// The video will be displayed in a 1280x720 rectangle inside that <video> tag.
|
// The video will be displayed in a 1280x720 rectangle inside that <video> tag.
|
||||||
// This means we want to calculate stretching using those values, but we don't know
|
// This means we want to calculate stretching using those values, but we don't know
|
||||||
// them. This means we have to calculate them.
|
// them. This means we have to calculate them.
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ squeezeFactor: ${squeezeFactor}`, '\nvideo', this.conf.video);
|
|||||||
// player > video > actual — double pillarbox
|
// player > video > actual — double pillarbox
|
||||||
stretchFactors.xFactor = actualAr / playerAr;
|
stretchFactors.xFactor = actualAr / playerAr;
|
||||||
stretchFactors.yFactor = 1;
|
stretchFactors.yFactor = 1;
|
||||||
|
|
||||||
this.logger.log('info', 'stretcher', "[Stretcher.js::calculateStretch] stretching strategy 3")
|
this.logger.log('info', 'stretcher', "[Stretcher.js::calculateStretch] stretching strategy 3")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ squeezeFactor: ${squeezeFactor}`, '\nvideo', this.conf.video);
|
|||||||
|
|
||||||
this.logger.log('info', 'stretcher', "[Stretcher.js::calculateStretch] stretching strategy 4")
|
this.logger.log('info', 'stretcher', "[Stretcher.js::calculateStretch] stretching strategy 4")
|
||||||
} else if ( actualAr < streamAr ) {
|
} else if ( actualAr < streamAr ) {
|
||||||
// NEEDS CHECKING
|
// NEEDS CHECKING
|
||||||
|
|
||||||
// video > actual > player
|
// video > actual > player
|
||||||
// video is letterboxed by player
|
// video is letterboxed by player
|
||||||
@ -242,10 +242,10 @@ squeezeFactor: ${squeezeFactor}`, '\nvideo', this.conf.video);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure that <video> element is never both taller-ish and wider-ish than the screen, while in fullscreen
|
* Ensure that <video> element is never both taller-ish and wider-ish than the screen, while in fullscreen
|
||||||
* on Chromium-based browsers.
|
* on Chromium-based browsers.
|
||||||
*
|
*
|
||||||
* Workaround for Chrome/Edge issue where zooming too much results in video being stretched incorrectly.
|
* Workaround for Chrome/Edge issue where zooming too much results in video being stretched incorrectly.
|
||||||
*
|
*
|
||||||
* Bug description — if the following are true:
|
* Bug description — if the following are true:
|
||||||
* * user is using Chrome or Edge (but surprisingly not Opera)
|
* * user is using Chrome or Edge (but surprisingly not Opera)
|
||||||
* * user is using hardware acceleration
|
* * user is using hardware acceleration
|
||||||
@ -253,10 +253,10 @@ squeezeFactor: ${squeezeFactor}`, '\nvideo', this.conf.video);
|
|||||||
* * user is in full screen mode
|
* * user is in full screen mode
|
||||||
* * the video is both roughly taller and roughly wider than the monitor
|
* * the video is both roughly taller and roughly wider than the monitor
|
||||||
* Then the video will do StretchType.Basic no matter what you put in `transform: scale(x,y)`.
|
* Then the video will do StretchType.Basic no matter what you put in `transform: scale(x,y)`.
|
||||||
*
|
*
|
||||||
* In practice, the issue appears slightly _before_ the last condition is met (video needs to be ~3434 px wide
|
* In practice, the issue appears slightly _before_ the last condition is met (video needs to be ~3434 px wide
|
||||||
* in order for this bug to trigger on my 3440x1440 display).
|
* in order for this bug to trigger on my 3440x1440 display).
|
||||||
*
|
*
|
||||||
* Because this issue happens regardless of how you upscale the video (doesn't matter if you use transform:scale
|
* Because this issue happens regardless of how you upscale the video (doesn't matter if you use transform:scale
|
||||||
* or width+height or anything else), the aspect ratio needs to be limited _before_ applying arCorrectionFactor
|
* or width+height or anything else), the aspect ratio needs to be limited _before_ applying arCorrectionFactor
|
||||||
* (note that arCorrectionFactor is usually <= 1, as it conpensates for zooming that height=[>100%] on <video>
|
* (note that arCorrectionFactor is usually <= 1, as it conpensates for zooming that height=[>100%] on <video>
|
||||||
@ -264,13 +264,13 @@ squeezeFactor: ${squeezeFactor}`, '\nvideo', this.conf.video);
|
|||||||
*/
|
*/
|
||||||
chromeBugMitigation(stretchFactors) {
|
chromeBugMitigation(stretchFactors) {
|
||||||
if (
|
if (
|
||||||
BrowserDetect.anyChromium
|
BrowserDetect.anyChromium
|
||||||
&& (this.conf.player?.dimensions?.fullscreen || ! this.settings?.active?.mitigations?.zoomLimit?.fullscreenOnly)
|
&& (this.conf.player?.dimensions?.fullscreen || ! this.settings?.active?.mitigations?.zoomLimit?.fullscreenOnly)
|
||||||
&& this.settings?.active?.mitigations?.zoomLimit?.enabled
|
&& this.settings?.active?.mitigations?.zoomLimit?.enabled
|
||||||
) {
|
) {
|
||||||
const playerAr = this.conf.player.aspectRatio;
|
const playerAr = this.conf.player.aspectRatio;
|
||||||
const streamAr = this.conf.aspectRatio;
|
const streamAr = this.conf.aspectRatio;
|
||||||
|
|
||||||
let maxSafeAr: number;
|
let maxSafeAr: number;
|
||||||
let arLimitFactor = this.settings?.active?.mitigations?.zoomLimit?.limit ?? 0.997;
|
let arLimitFactor = this.settings?.active?.mitigations?.zoomLimit?.limit ?? 0.997;
|
||||||
|
|
||||||
@ -282,9 +282,9 @@ squeezeFactor: ${squeezeFactor}`, '\nvideo', this.conf.video);
|
|||||||
// in some cases, we tolerate minor stretch to avoid tiny black bars
|
// in some cases, we tolerate minor stretch to avoid tiny black bars
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxSafeStretchFactor = this.conf.resizer.scaler.calculateCropCore(
|
const maxSafeStretchFactor = this.conf.resizer.scaler.calculateCropCore(
|
||||||
{
|
{
|
||||||
xFactor: 1,
|
xFactor: 1,
|
||||||
yFactor: 1,
|
yFactor: 1,
|
||||||
arCorrectionFactor: stretchFactors.arCorrectionFactor
|
arCorrectionFactor: stretchFactors.arCorrectionFactor
|
||||||
|
Loading…
Reference in New Issue
Block a user