mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-06-06 07:37:19 +02:00
Update better-xcloud.user.js
This commit is contained in:
parent
1dee720f77
commit
761e58254a
99
dist/better-xcloud.user.js
vendored
99
dist/better-xcloud.user.js
vendored
@ -3918,12 +3918,23 @@ class SettingElement {
|
|||||||
const MIN = setting.min;
|
const MIN = setting.min;
|
||||||
const MAX = setting.max;
|
const MAX = setting.max;
|
||||||
const STEPS = Math.max(setting.steps || 1, 1);
|
const STEPS = Math.max(setting.steps || 1, 1);
|
||||||
const $wrapper = CE("div", { class: "bx-number-stepper" }, $decBtn = CE("button", { "data-type": "dec" }, "-"), $text = CE("span", {}, value + options.suffix), $incBtn = CE("button", { "data-type": "inc" }, "+"));
|
const renderTextValue = (value2) => {
|
||||||
|
value2 = parseInt(value2);
|
||||||
|
let textContent = null;
|
||||||
|
if (options.customTextValue) {
|
||||||
|
textContent = options.customTextValue(value2);
|
||||||
|
}
|
||||||
|
if (textContent === null) {
|
||||||
|
textContent = value2.toString() + options.suffix;
|
||||||
|
}
|
||||||
|
return textContent;
|
||||||
|
};
|
||||||
|
const $wrapper = CE("div", { class: "bx-number-stepper" }, $decBtn = CE("button", { "data-type": "dec" }, "-"), $text = CE("span", {}, renderTextValue(value)), $incBtn = CE("button", { "data-type": "inc" }, "+"));
|
||||||
if (!options.disabled && !options.hideSlider) {
|
if (!options.disabled && !options.hideSlider) {
|
||||||
$range = CE("input", { type: "range", min: MIN, max: MAX, value, step: STEPS });
|
$range = CE("input", { type: "range", min: MIN, max: MAX, value, step: STEPS });
|
||||||
$range.addEventListener("input", (e) => {
|
$range.addEventListener("input", (e) => {
|
||||||
value = parseInt(e.target.value);
|
value = parseInt(e.target.value);
|
||||||
$text.textContent = value + options.suffix;
|
$text.textContent = renderTextValue(value);
|
||||||
onChange && onChange(e, value);
|
onChange && onChange(e, value);
|
||||||
});
|
});
|
||||||
$wrapper.appendChild($range);
|
$wrapper.appendChild($range);
|
||||||
@ -3974,7 +3985,7 @@ class SettingElement {
|
|||||||
} else {
|
} else {
|
||||||
value2 = Math.min(MAX, value2 + STEPS);
|
value2 = Math.min(MAX, value2 + STEPS);
|
||||||
}
|
}
|
||||||
$text.textContent = value2.toString() + options.suffix;
|
$text.textContent = renderTextValue(value2);
|
||||||
$range && ($range.value = value2.toString());
|
$range && ($range.value = value2.toString());
|
||||||
isHolding = false;
|
isHolding = false;
|
||||||
onChange && onChange(e, value2);
|
onChange && onChange(e, value2);
|
||||||
@ -3997,7 +4008,7 @@ class SettingElement {
|
|||||||
};
|
};
|
||||||
const onContextMenu = (e) => e.preventDefault();
|
const onContextMenu = (e) => e.preventDefault();
|
||||||
$wrapper.setValue = (value2) => {
|
$wrapper.setValue = (value2) => {
|
||||||
$text.textContent = value2 + options.suffix;
|
$text.textContent = renderTextValue(value2);
|
||||||
$range && ($range.value = value2);
|
$range && ($range.value = value2);
|
||||||
};
|
};
|
||||||
$decBtn.addEventListener("click", onClick);
|
$decBtn.addEventListener("click", onClick);
|
||||||
@ -4501,6 +4512,7 @@ var PrefKey;
|
|||||||
PrefKey2["STREAM_TOUCH_CONTROLLER_STYLE_STANDARD"] = "stream_touch_controller_style_standard";
|
PrefKey2["STREAM_TOUCH_CONTROLLER_STYLE_STANDARD"] = "stream_touch_controller_style_standard";
|
||||||
PrefKey2["STREAM_TOUCH_CONTROLLER_STYLE_CUSTOM"] = "stream_touch_controller_style_custom";
|
PrefKey2["STREAM_TOUCH_CONTROLLER_STYLE_CUSTOM"] = "stream_touch_controller_style_custom";
|
||||||
PrefKey2["STREAM_DISABLE_FEEDBACK_DIALOG"] = "stream_disable_feedback_dialog";
|
PrefKey2["STREAM_DISABLE_FEEDBACK_DIALOG"] = "stream_disable_feedback_dialog";
|
||||||
|
PrefKey2["BITRATE_VIDEO_MAX"] = "bitrate_video_max";
|
||||||
PrefKey2["GAME_BAR_POSITION"] = "game_bar_position";
|
PrefKey2["GAME_BAR_POSITION"] = "game_bar_position";
|
||||||
PrefKey2["LOCAL_CO_OP_ENABLED"] = "local_co_op_enabled";
|
PrefKey2["LOCAL_CO_OP_ENABLED"] = "local_co_op_enabled";
|
||||||
PrefKey2["CONTROLLER_ENABLE_SHORTCUTS"] = "controller_enable_shortcuts";
|
PrefKey2["CONTROLLER_ENABLE_SHORTCUTS"] = "controller_enable_shortcuts";
|
||||||
@ -4753,6 +4765,25 @@ class Preferences {
|
|||||||
label: t("disable-post-stream-feedback-dialog"),
|
label: t("disable-post-stream-feedback-dialog"),
|
||||||
default: false
|
default: false
|
||||||
},
|
},
|
||||||
|
[PrefKey.BITRATE_VIDEO_MAX]: {
|
||||||
|
type: SettingElementType.NUMBER_STEPPER,
|
||||||
|
label: "Maximum video bitrate",
|
||||||
|
default: 0,
|
||||||
|
min: 0,
|
||||||
|
max: 15,
|
||||||
|
steps: 1,
|
||||||
|
params: {
|
||||||
|
suffix: " Mb/s",
|
||||||
|
exactTicks: 5,
|
||||||
|
customTextValue: (value) => {
|
||||||
|
value = parseInt(value);
|
||||||
|
if (value === 0) {
|
||||||
|
return t("default");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
[PrefKey.GAME_BAR_POSITION]: {
|
[PrefKey.GAME_BAR_POSITION]: {
|
||||||
label: t("position"),
|
label: t("position"),
|
||||||
default: "bottom-left",
|
default: "bottom-left",
|
||||||
@ -9028,7 +9059,7 @@ div[data-testid=media-container].bx-taking-screenshot:before {
|
|||||||
}
|
}
|
||||||
.bx-number-stepper span {
|
.bx-number-stepper span {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 40px;
|
min-width: 40px;
|
||||||
font-family: var(--bx-monospaced-font);
|
font-family: var(--bx-monospaced-font);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
@ -10538,6 +10569,7 @@ var SETTINGS_UI = {
|
|||||||
items: [
|
items: [
|
||||||
PrefKey.STREAM_TARGET_RESOLUTION,
|
PrefKey.STREAM_TARGET_RESOLUTION,
|
||||||
PrefKey.STREAM_CODEC_PROFILE,
|
PrefKey.STREAM_CODEC_PROFILE,
|
||||||
|
PrefKey.BITRATE_VIDEO_MAX,
|
||||||
PrefKey.AUDIO_ENABLE_VOLUME_CONTROL,
|
PrefKey.AUDIO_ENABLE_VOLUME_CONTROL,
|
||||||
PrefKey.AUDIO_MIC_ON_PLAYING,
|
PrefKey.AUDIO_MIC_ON_PLAYING,
|
||||||
PrefKey.STREAM_DISABLE_FEEDBACK_DIALOG,
|
PrefKey.STREAM_DISABLE_FEEDBACK_DIALOG,
|
||||||
@ -10721,6 +10753,51 @@ function overridePreloadState() {
|
|||||||
}
|
}
|
||||||
var LOG_TAG5 = "PreloadState";
|
var LOG_TAG5 = "PreloadState";
|
||||||
|
|
||||||
|
// src/utils/sdp.ts
|
||||||
|
function patchSdpBitrate(sdp, video, audio) {
|
||||||
|
const lines = sdp.split("\n");
|
||||||
|
const mediaSet = new Set;
|
||||||
|
!!video && mediaSet.add("video");
|
||||||
|
!!audio && mediaSet.add("audio");
|
||||||
|
const bitrate = {
|
||||||
|
video,
|
||||||
|
audio
|
||||||
|
};
|
||||||
|
for (let lineNumber = 0;lineNumber < lines.length; lineNumber++) {
|
||||||
|
let media = "";
|
||||||
|
let line = lines[lineNumber];
|
||||||
|
if (!line.startsWith("m=")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (const m of mediaSet) {
|
||||||
|
if (line.startsWith(`m=${m}`)) {
|
||||||
|
media = m;
|
||||||
|
mediaSet.delete(media);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!media) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const bLine = `b=AS:${bitrate[media]}`;
|
||||||
|
while (lineNumber++, lineNumber < lines.length) {
|
||||||
|
line = lines[lineNumber];
|
||||||
|
if (line.startsWith("i=") || line.startsWith("c=")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (line.startsWith("b=AS:")) {
|
||||||
|
lines[lineNumber] = bLine;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (line.startsWith("m=")) {
|
||||||
|
lines.splice(lineNumber, 0, bLine);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lines.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
// src/utils/monkey-patches.ts
|
// src/utils/monkey-patches.ts
|
||||||
function patchVideoApi() {
|
function patchVideoApi() {
|
||||||
const PREF_SKIP_SPLASH_VIDEO = getPref(PrefKey.SKIP_SPLASH_VIDEO);
|
const PREF_SKIP_SPLASH_VIDEO = getPref(PrefKey.SKIP_SPLASH_VIDEO);
|
||||||
@ -10791,6 +10868,18 @@ function patchRtcPeerConnection() {
|
|||||||
});
|
});
|
||||||
return dataChannel;
|
return dataChannel;
|
||||||
};
|
};
|
||||||
|
const nativeSetLocalDescription = RTCPeerConnection.prototype.setLocalDescription;
|
||||||
|
RTCPeerConnection.prototype.setLocalDescription = function(description) {
|
||||||
|
try {
|
||||||
|
const maxVideoBitrate = getPref(PrefKey.BITRATE_VIDEO_MAX);
|
||||||
|
if (maxVideoBitrate > 0) {
|
||||||
|
arguments[0].sdp = patchSdpBitrate(arguments[0].sdp, maxVideoBitrate * 1000);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
BxLogger.error("setLocalDescription", e);
|
||||||
|
}
|
||||||
|
return nativeSetLocalDescription.apply(this, arguments);
|
||||||
|
};
|
||||||
const OrgRTCPeerConnection = window.RTCPeerConnection;
|
const OrgRTCPeerConnection = window.RTCPeerConnection;
|
||||||
window.RTCPeerConnection = function() {
|
window.RTCPeerConnection = function() {
|
||||||
const conn = new OrgRTCPeerConnection;
|
const conn = new OrgRTCPeerConnection;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user