From b4167b175b374ce84cd58ebdb2ca6cd79fc0b333 Mon Sep 17 00:00:00 2001 From: kkostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Fri, 26 Nov 2021 17:36:02 -0500 Subject: [PATCH] screensharing: add framerate for macOS Change-Id: I2a22e80a8ea826641afef9a82bf3b17ca35fcaed --- src/media/video/osxvideo/video_device_impl.mm | 29 ++++++++++++++++++- .../osxvideo/video_device_monitor_impl.mm | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/media/video/osxvideo/video_device_impl.mm b/src/media/video/osxvideo/video_device_impl.mm index 7888c21664..09053d3e76 100644 --- a/src/media/video/osxvideo/video_device_impl.mm +++ b/src/media/video/osxvideo/video_device_impl.mm @@ -61,6 +61,16 @@ class VideoDeviceImpl { VideoSize current_size_; FrameRate rate_ {}; std::map<VideoSize, std::vector<FrameRate>> available_rates_; + FrameRate desktopFrameRate_ = {30}; + std::vector<FrameRate> desktopFrameRates_ = {FrameRate(5), + FrameRate(10), + FrameRate(15), + FrameRate(20), + FrameRate(25), + FrameRate(30), + FrameRate(60), + FrameRate(120), + FrameRate(144)}; }; VideoDeviceImpl::VideoDeviceImpl(const std::string& uniqueID) @@ -69,6 +79,14 @@ VideoDeviceImpl::VideoDeviceImpl(const std::string& uniqueID) , avDevice_([AVCaptureDevice deviceWithUniqueID: [NSString stringWithCString:uniqueID.c_str() encoding:[NSString defaultCStringEncoding]]]) { + + if (id == DEVICE_DESKTOP) { + name = DEVICE_DESKTOP; + VideoSize size {0, 0}; + available_sizes_.emplace_back(size); + available_rates_[size] = desktopFrameRates_; + return; + } name = [[avDevice_ localizedName] UTF8String]; available_sizes_.reserve(avDevice_.formats.count); @@ -111,9 +129,13 @@ DeviceParams VideoDeviceImpl::getDeviceParams() const { DeviceParams params; - params.name = [[avDevice_ localizedName] UTF8String]; params.unique_id = id; params.input = id; + if (id == DEVICE_DESKTOP) { + params.framerate = desktopFrameRate_; + return params; + } + params.name = [[avDevice_ localizedName] UTF8String]; params.framerate = rate_; params.format = "avfoundation"; params.pixel_format = "nv12"; @@ -125,6 +147,11 @@ VideoDeviceImpl::getDeviceParams() const void VideoDeviceImpl::setDeviceParams(const DeviceParams& params) { + if (id == DEVICE_DESKTOP) { + name = DEVICE_DESKTOP; + desktopFrameRate_ = params.framerate; + return; + } rate_ = params.framerate; current_size_ = extractSize({params.width, params.height}); } diff --git a/src/media/video/osxvideo/video_device_monitor_impl.mm b/src/media/video/osxvideo/video_device_monitor_impl.mm index f5908dbf50..9910c0208d 100644 --- a/src/media/video/osxvideo/video_device_monitor_impl.mm +++ b/src/media/video/osxvideo/video_device_monitor_impl.mm @@ -127,6 +127,7 @@ VideoDeviceMonitor::VideoDeviceMonitor() : monitorImpl_(new VideoDeviceMonitorImpl(this)) { monitorImpl_->start(); + addDevice(DEVICE_DESKTOP, {}); } VideoDeviceMonitor::~VideoDeviceMonitor() -- GitLab