fix virtual camera support (#1215)
Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
+25
-10
@@ -7,33 +7,45 @@
|
|||||||
import { Logger } from "@vencord/types/utils";
|
import { Logger } from "@vencord/types/utils";
|
||||||
import { MediaEngineStore } from "renderer/common";
|
import { MediaEngineStore } from "renderer/common";
|
||||||
|
|
||||||
const logger = new Logger("FixAutoGain");
|
const logger = new Logger("VesktopStreamFixes");
|
||||||
|
|
||||||
function fixTrackConstraints(constraint: MediaTrackConstraints) {
|
function fixAudioTrackConstraints(constraint: MediaTrackConstraints) {
|
||||||
const target = constraint.advanced?.find(opt => Object.hasOwn(opt, "autoGainControl")) ?? constraint;
|
const target = constraint.advanced?.find(opt => Object.hasOwn(opt, "autoGainControl")) ?? constraint;
|
||||||
|
|
||||||
target.autoGainControl = MediaEngineStore.getAutomaticGainControl();
|
target.autoGainControl = MediaEngineStore.getAutomaticGainControl();
|
||||||
}
|
}
|
||||||
|
|
||||||
function fixStreamConstraints(constraints: MediaStreamConstraints | undefined) {
|
function fixVideoTrackConstraints(constraint: MediaTrackConstraints) {
|
||||||
if (!constraints?.audio) return;
|
if (typeof constraint.deviceId === "string" && constraint.deviceId !== "default") {
|
||||||
|
constraint.deviceId = { exact: constraint.deviceId };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixStreamConstraints(constraints: MediaStreamConstraints | undefined) {
|
||||||
|
if (!constraints) return;
|
||||||
|
|
||||||
|
if (constraints.audio) {
|
||||||
if (typeof constraints.audio !== "object") {
|
if (typeof constraints.audio !== "object") {
|
||||||
constraints.audio = {};
|
constraints.audio = {};
|
||||||
}
|
}
|
||||||
|
fixAudioTrackConstraints(constraints.audio);
|
||||||
|
}
|
||||||
|
|
||||||
fixTrackConstraints(constraints.audio);
|
if (constraints.video) {
|
||||||
|
if (typeof constraints.video !== "object") {
|
||||||
|
constraints.video = {};
|
||||||
|
}
|
||||||
|
fixVideoTrackConstraints(constraints.video);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const originalGetUserMedia = navigator.mediaDevices.getUserMedia;
|
const originalGetUserMedia = navigator.mediaDevices.getUserMedia;
|
||||||
navigator.mediaDevices.getUserMedia = function (constraints) {
|
navigator.mediaDevices.getUserMedia = function (constraints) {
|
||||||
try {
|
try {
|
||||||
fixStreamConstraints(constraints);
|
fixStreamConstraints(constraints);
|
||||||
logger.debug("Fixed getUserMedia constraints", constraints);
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error("Failed to fix getUserMedia constraints", e);
|
logger.error("Failed to fix getUserMedia constraints", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return originalGetUserMedia.call(this, constraints);
|
return originalGetUserMedia.call(this, constraints);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -41,10 +53,13 @@ const originalApplyConstraints = MediaStreamTrack.prototype.applyConstraints;
|
|||||||
MediaStreamTrack.prototype.applyConstraints = function (constraints) {
|
MediaStreamTrack.prototype.applyConstraints = function (constraints) {
|
||||||
if (constraints) {
|
if (constraints) {
|
||||||
try {
|
try {
|
||||||
fixTrackConstraints(constraints);
|
if (this.kind === "audio") {
|
||||||
logger.debug("Fixed applyConstraints constraints", constraints);
|
fixAudioTrackConstraints(constraints);
|
||||||
|
} else if (this.kind === "video") {
|
||||||
|
fixVideoTrackConstraints(constraints);
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error("Failed to fix applyConstraints constraints", e);
|
logger.error("Failed to fix constraints", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return originalApplyConstraints.call(this, constraints);
|
return originalApplyConstraints.call(this, constraints);
|
||||||
Reference in New Issue
Block a user