mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-06-06 23:57:19 +02:00
Optimize video player
This commit is contained in:
parent
d5f02550c7
commit
dc62c13c21
@ -34,11 +34,22 @@ body[data-media-type=tv] .bx-stream-refresh-button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div[data-testid=media-container].bx-taking-screenshot:before {
|
div[data-testid=media-container] {
|
||||||
animation: bx-anim-taking-screenshot 0.5s ease;
|
display: flex;
|
||||||
content: ' ';
|
|
||||||
position: absolute;
|
&.bx-taking-screenshot:before {
|
||||||
width: 100%;
|
animation: bx-anim-taking-screenshot 0.5s ease;
|
||||||
height: 100%;
|
content: ' ';
|
||||||
z-index: var(--bx-screenshot-animation-z-index);
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: var(--bx-screenshot-animation-z-index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#game-stream video {
|
||||||
|
margin: auto;
|
||||||
|
align-self: center;
|
||||||
|
background: #000;
|
||||||
}
|
}
|
||||||
|
@ -431,43 +431,65 @@ export function updateVideoPlayerCss() {
|
|||||||
Screenshot.updateCanvasFilters(filters);
|
Screenshot.updateCanvasFilters(filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
const PREF_RATIO = getPref(PrefKey.VIDEO_RATIO);
|
|
||||||
if (PREF_RATIO && PREF_RATIO !== '16:9') {
|
|
||||||
if (PREF_RATIO.includes(':')) {
|
|
||||||
videoCss += `aspect-ratio: ${PREF_RATIO.replace(':', '/')}; object-fit: unset !important;`;
|
|
||||||
|
|
||||||
const tmp = PREF_RATIO.split(':');
|
|
||||||
const ratio = parseFloat(tmp[0]) / parseFloat(tmp[1]);
|
|
||||||
const maxRatio = window.innerWidth / window.innerHeight;
|
|
||||||
if (ratio < maxRatio) {
|
|
||||||
videoCss += 'width: fit-content !important;'
|
|
||||||
} else {
|
|
||||||
videoCss += 'height: fit-content !important;'
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
videoCss += `object-fit: ${PREF_RATIO} !important;`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let css = '';
|
let css = '';
|
||||||
if (videoCss) {
|
if (videoCss) {
|
||||||
css = `
|
css = `
|
||||||
div[data-testid="media-container"] {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
#game-stream video {
|
#game-stream video {
|
||||||
margin: 0 auto;
|
|
||||||
align-self: center;
|
|
||||||
background: #000;
|
|
||||||
${videoCss}
|
${videoCss}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
$elm.textContent = css;
|
$elm.textContent = css;
|
||||||
|
|
||||||
|
resizeVideoPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resizeVideoPlayer() {
|
||||||
|
const $video = STATES.currentStream.$video;
|
||||||
|
if (!$video || !$video.parentElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PREF_RATIO = getPref(PrefKey.VIDEO_RATIO);
|
||||||
|
if (PREF_RATIO.includes(':')) {
|
||||||
|
const tmp = PREF_RATIO.split(':');
|
||||||
|
|
||||||
|
// Get preferred ratio
|
||||||
|
const videoRatio = parseFloat(tmp[0]) / parseFloat(tmp[1]);
|
||||||
|
|
||||||
|
let width = 0;
|
||||||
|
let height = 0;
|
||||||
|
|
||||||
|
// Get parent's ratio
|
||||||
|
const parentRect = $video.parentElement.getBoundingClientRect();
|
||||||
|
const parentRatio = parentRect.width / parentRect.height;
|
||||||
|
|
||||||
|
// Get target width & height
|
||||||
|
if (parentRatio > videoRatio) {
|
||||||
|
height = parentRect.height;
|
||||||
|
width = height * videoRatio;
|
||||||
|
} else {
|
||||||
|
width = parentRect.width;
|
||||||
|
height = width / videoRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevent floating points
|
||||||
|
width = Math.floor(width);
|
||||||
|
height = Math.floor(height);
|
||||||
|
|
||||||
|
// Update size
|
||||||
|
$video.style.width = `${width}px`;
|
||||||
|
$video.style.height = `${height}px`;
|
||||||
|
$video.style.objectFit = 'fill';
|
||||||
|
} else {
|
||||||
|
$video.style.width = '100%';
|
||||||
|
$video.style.height = '100%';
|
||||||
|
$video.style.objectFit = PREF_RATIO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export function setupStreamUi() {
|
export function setupStreamUi() {
|
||||||
// Prevent initializing multiple times
|
// Prevent initializing multiple times
|
||||||
if (!document.querySelector('.bx-quick-settings-bar')) {
|
if (!document.querySelector('.bx-quick-settings-bar')) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user