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 { 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;
|
||||
|
||||
target.autoGainControl = MediaEngineStore.getAutomaticGainControl();
|
||||
}
|
||||
|
||||
function fixStreamConstraints(constraints: MediaStreamConstraints | undefined) {
|
||||
if (!constraints?.audio) return;
|
||||
function fixVideoTrackConstraints(constraint: MediaTrackConstraints) {
|
||||
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") {
|
||||
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;
|
||||
navigator.mediaDevices.getUserMedia = function (constraints) {
|
||||
try {
|
||||
fixStreamConstraints(constraints);
|
||||
logger.debug("Fixed getUserMedia constraints", constraints);
|
||||
} catch (e) {
|
||||
logger.error("Failed to fix getUserMedia constraints", e);
|
||||
}
|
||||
|
||||
return originalGetUserMedia.call(this, constraints);
|
||||
};
|
||||
|
||||
@@ -41,10 +53,13 @@ const originalApplyConstraints = MediaStreamTrack.prototype.applyConstraints;
|
||||
MediaStreamTrack.prototype.applyConstraints = function (constraints) {
|
||||
if (constraints) {
|
||||
try {
|
||||
fixTrackConstraints(constraints);
|
||||
logger.debug("Fixed applyConstraints constraints", constraints);
|
||||
if (this.kind === "audio") {
|
||||
fixAudioTrackConstraints(constraints);
|
||||
} else if (this.kind === "video") {
|
||||
fixVideoTrackConstraints(constraints);
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error("Failed to fix applyConstraints constraints", e);
|
||||
logger.error("Failed to fix constraints", e);
|
||||
}
|
||||
}
|
||||
return originalApplyConstraints.call(this, constraints);
|
||||
Reference in New Issue
Block a user