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_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;

View file

@ -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,
})
);

View file

@ -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;