Fix screenshare resolution

Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
This commit is contained in:
automated-signal 2024-09-30 12:08:13 -05:00 committed by GitHub
parent c5e5b54561
commit 6baa4a7739
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 16 deletions

View file

@ -8,6 +8,11 @@ export const REQUESTED_VIDEO_WIDTH = 960;
export const REQUESTED_VIDEO_HEIGHT = 720; export const REQUESTED_VIDEO_HEIGHT = 720;
export const REQUESTED_VIDEO_FRAMERATE = 30; 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_WIDTH = 2880;
export const MAX_FRAME_HEIGHT = 1800; export const MAX_FRAME_HEIGHT = 1800;
export const FRAME_BUFFER_SIZE = MAX_FRAME_WIDTH * MAX_FRAME_HEIGHT * 4; export const FRAME_BUFFER_SIZE = MAX_FRAME_WIDTH * MAX_FRAME_HEIGHT * 4;

View file

@ -96,6 +96,9 @@ import {
REQUESTED_VIDEO_WIDTH, REQUESTED_VIDEO_WIDTH,
REQUESTED_VIDEO_HEIGHT, REQUESTED_VIDEO_HEIGHT,
REQUESTED_VIDEO_FRAMERATE, REQUESTED_VIDEO_FRAMERATE,
REQUESTED_SCREEN_SHARE_WIDTH,
REQUESTED_SCREEN_SHARE_HEIGHT,
REQUESTED_SCREEN_SHARE_FRAMERATE,
} from '../calling/constants'; } from '../calling/constants';
import { callingMessageToProto } from '../util/callingMessageToProto'; import { callingMessageToProto } from '../util/callingMessageToProto';
import { requestMicrophonePermissions } from '../util/requestMicrophonePermissions'; import { requestMicrophonePermissions } from '../util/requestMicrophonePermissions';
@ -2042,10 +2045,9 @@ export class CallingClass {
this.hadLocalVideoBeforePresenting = hasLocalVideo; this.hadLocalVideoBeforePresenting = hasLocalVideo;
drop( drop(
this.enableCaptureAndSend(call, { this.enableCaptureAndSend(call, {
// 15fps is much nicer but takes up a lot more CPU. maxFramerate: REQUESTED_SCREEN_SHARE_FRAMERATE,
maxFramerate: 5, maxHeight: REQUESTED_SCREEN_SHARE_HEIGHT,
maxHeight: 1800, maxWidth: REQUESTED_SCREEN_SHARE_WIDTH,
maxWidth: 2880,
mediaStream, mediaStream,
}) })
); );

View file

@ -10,9 +10,9 @@ import * as Errors from '../types/errors';
import type { PresentableSource } from '../types/Calling'; import type { PresentableSource } from '../types/Calling';
import type { LocalizerType } from '../types/Util'; import type { LocalizerType } from '../types/Util';
import { import {
REQUESTED_VIDEO_WIDTH, REQUESTED_SCREEN_SHARE_WIDTH,
REQUESTED_VIDEO_HEIGHT, REQUESTED_SCREEN_SHARE_HEIGHT,
REQUESTED_VIDEO_FRAMERATE, REQUESTED_SCREEN_SHARE_FRAMERATE,
} from '../calling/constants'; } from '../calling/constants';
import { strictAssert } from './assert'; import { strictAssert } from './assert';
import { explodePromise } from './explodePromise'; import { explodePromise } from './explodePromise';
@ -178,16 +178,16 @@ export class DesktopCapturer {
const stream = await navigator.mediaDevices.getDisplayMedia({ const stream = await navigator.mediaDevices.getDisplayMedia({
video: { video: {
width: { width: {
max: REQUESTED_VIDEO_WIDTH, max: REQUESTED_SCREEN_SHARE_WIDTH,
ideal: REQUESTED_VIDEO_WIDTH, ideal: REQUESTED_SCREEN_SHARE_WIDTH,
}, },
height: { height: {
max: REQUESTED_VIDEO_HEIGHT, max: REQUESTED_SCREEN_SHARE_HEIGHT,
ideal: REQUESTED_VIDEO_HEIGHT, ideal: REQUESTED_SCREEN_SHARE_HEIGHT,
}, },
frameRate: { frameRate: {
max: REQUESTED_VIDEO_FRAMERATE, max: REQUESTED_SCREEN_SHARE_FRAMERATE,
ideal: REQUESTED_VIDEO_FRAMERATE, ideal: REQUESTED_SCREEN_SHARE_FRAMERATE,
}, },
}, },
}); });
@ -223,9 +223,9 @@ export class DesktopCapturer {
let isRunning = false; let isRunning = false;
const stream = new macScreenShare.Stream({ const stream = new macScreenShare.Stream({
width: REQUESTED_VIDEO_WIDTH, width: REQUESTED_SCREEN_SHARE_WIDTH,
height: REQUESTED_VIDEO_HEIGHT, height: REQUESTED_SCREEN_SHARE_HEIGHT,
frameRate: REQUESTED_VIDEO_FRAMERATE, frameRate: REQUESTED_SCREEN_SHARE_FRAMERATE,
onStart: () => { onStart: () => {
isRunning = true; isRunning = true;