From 6baa4a7739def4326f5c74f945dd7dd881d4cf49 Mon Sep 17 00:00:00 2001 From: automated-signal <37887102+automated-signal@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:08:13 -0500 Subject: [PATCH] Fix screenshare resolution Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> --- ts/calling/constants.ts | 5 +++++ ts/services/calling.ts | 10 ++++++---- ts/util/desktopCapturer.ts | 24 ++++++++++++------------ 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/ts/calling/constants.ts b/ts/calling/constants.ts index ad8a2490c..5b469fcfe 100644 --- a/ts/calling/constants.ts +++ b/ts/calling/constants.ts @@ -8,6 +8,11 @@ export const REQUESTED_VIDEO_WIDTH = 960; export const REQUESTED_VIDEO_HEIGHT = 720; export const REQUESTED_VIDEO_FRAMERATE = 30; +export const REQUESTED_SCREEN_SHARE_WIDTH = 2880; +export const REQUESTED_SCREEN_SHARE_HEIGHT = 1800; +// 15fps is much nicer but takes up a lot more CPU. +export const REQUESTED_SCREEN_SHARE_FRAMERATE = 5; + export const MAX_FRAME_WIDTH = 2880; export const MAX_FRAME_HEIGHT = 1800; export const FRAME_BUFFER_SIZE = MAX_FRAME_WIDTH * MAX_FRAME_HEIGHT * 4; diff --git a/ts/services/calling.ts b/ts/services/calling.ts index df6a8848e..f126e4b5c 100644 --- a/ts/services/calling.ts +++ b/ts/services/calling.ts @@ -96,6 +96,9 @@ import { REQUESTED_VIDEO_WIDTH, REQUESTED_VIDEO_HEIGHT, REQUESTED_VIDEO_FRAMERATE, + REQUESTED_SCREEN_SHARE_WIDTH, + REQUESTED_SCREEN_SHARE_HEIGHT, + REQUESTED_SCREEN_SHARE_FRAMERATE, } from '../calling/constants'; import { callingMessageToProto } from '../util/callingMessageToProto'; import { requestMicrophonePermissions } from '../util/requestMicrophonePermissions'; @@ -2042,10 +2045,9 @@ export class CallingClass { this.hadLocalVideoBeforePresenting = hasLocalVideo; drop( this.enableCaptureAndSend(call, { - // 15fps is much nicer but takes up a lot more CPU. - maxFramerate: 5, - maxHeight: 1800, - maxWidth: 2880, + maxFramerate: REQUESTED_SCREEN_SHARE_FRAMERATE, + maxHeight: REQUESTED_SCREEN_SHARE_HEIGHT, + maxWidth: REQUESTED_SCREEN_SHARE_WIDTH, mediaStream, }) ); diff --git a/ts/util/desktopCapturer.ts b/ts/util/desktopCapturer.ts index 0e9b52834..7fe8c346e 100644 --- a/ts/util/desktopCapturer.ts +++ b/ts/util/desktopCapturer.ts @@ -10,9 +10,9 @@ import * as Errors from '../types/errors'; import type { PresentableSource } from '../types/Calling'; import type { LocalizerType } from '../types/Util'; import { - REQUESTED_VIDEO_WIDTH, - REQUESTED_VIDEO_HEIGHT, - REQUESTED_VIDEO_FRAMERATE, + REQUESTED_SCREEN_SHARE_WIDTH, + REQUESTED_SCREEN_SHARE_HEIGHT, + REQUESTED_SCREEN_SHARE_FRAMERATE, } from '../calling/constants'; import { strictAssert } from './assert'; import { explodePromise } from './explodePromise'; @@ -178,16 +178,16 @@ export class DesktopCapturer { const stream = await navigator.mediaDevices.getDisplayMedia({ video: { width: { - max: REQUESTED_VIDEO_WIDTH, - ideal: REQUESTED_VIDEO_WIDTH, + max: REQUESTED_SCREEN_SHARE_WIDTH, + ideal: REQUESTED_SCREEN_SHARE_WIDTH, }, height: { - max: REQUESTED_VIDEO_HEIGHT, - ideal: REQUESTED_VIDEO_HEIGHT, + max: REQUESTED_SCREEN_SHARE_HEIGHT, + ideal: REQUESTED_SCREEN_SHARE_HEIGHT, }, frameRate: { - max: REQUESTED_VIDEO_FRAMERATE, - ideal: REQUESTED_VIDEO_FRAMERATE, + max: REQUESTED_SCREEN_SHARE_FRAMERATE, + ideal: REQUESTED_SCREEN_SHARE_FRAMERATE, }, }, }); @@ -223,9 +223,9 @@ export class DesktopCapturer { let isRunning = false; const stream = new macScreenShare.Stream({ - width: REQUESTED_VIDEO_WIDTH, - height: REQUESTED_VIDEO_HEIGHT, - frameRate: REQUESTED_VIDEO_FRAMERATE, + width: REQUESTED_SCREEN_SHARE_WIDTH, + height: REQUESTED_SCREEN_SHARE_HEIGHT, + frameRate: REQUESTED_SCREEN_SHARE_FRAMERATE, onStart: () => { isRunning = true;