diff --git a/src/media/video/osxvideo/video_device_impl.mm b/src/media/video/osxvideo/video_device_impl.mm index d205ee8c8a81a49404cc3f3b6925e88562b0b542..df114bf069f102084dca6233922a7e510b1ec58f 100644 --- a/src/media/video/osxvideo/video_device_impl.mm +++ b/src/media/video/osxvideo/video_device_impl.mm @@ -59,7 +59,8 @@ class VideoDeviceImpl { FrameRate rate_ {}; std::map<VideoSize, std::vector<FrameRate>> available_rates_; FrameRate desktopFrameRate_ = {30}; - std::vector<FrameRate> desktopFrameRates_ = {FrameRate(5), + std::vector<FrameRate> desktopFrameRates_ = {FrameRate(1), + FrameRate(5), FrameRate(10), FrameRate(15), FrameRate(20), diff --git a/src/media/video/v4l2/video_device_impl.cpp b/src/media/video/v4l2/video_device_impl.cpp index 9a2f3497e3fca0110387ef7211180bc4087566d3..1bd9db2cab8e80d904f25714fdfb533f49946997 100644 --- a/src/media/video/v4l2/video_device_impl.cpp +++ b/src/media/video/v4l2/video_device_impl.cpp @@ -537,7 +537,8 @@ vector<FrameRate> VideoDeviceImpl::getRateList(const string& channel, VideoSize size) const { if (unique_id == DEVICE_DESKTOP) { - return {FrameRate(5), + return {FrameRate(1), + FrameRate(5), FrameRate(10), FrameRate(15), FrameRate(20), diff --git a/src/media/video/video_input.cpp b/src/media/video/video_input.cpp index 90404cbe26a5563c31eb7b0dbe294a1d23ec6533..423c0e2db22ca9c10766ff279bf2f5fdbd566d4c 100644 --- a/src/media/video/video_input.cpp +++ b/src/media/video/video_input.cpp @@ -433,9 +433,18 @@ VideoInput::initLinuxGrab(const std::string& display) DeviceParams p = jami::getVideoDeviceMonitor().getDeviceParams(DEVICE_DESKTOP); if (winIdPos != std::string::npos) { - p.window_id = display.substr(winIdPos + windowIdStr.size()); // "0x0340021e"; + size_t endPos = display.find(' ', winIdPos + windowIdStr.size()); + p.window_id = display.substr(winIdPos + windowIdStr.size(), + endPos - (winIdPos + windowIdStr.size())); // "0x0340021e"; p.is_area = 0; } + std::string fpsStr = "fps:"; + if (display.find(fpsStr) != std::string::npos) { + size_t fpsPos = display.find(fpsStr) + fpsStr.size(); + int fps = std::stoi(display.substr(fpsPos)); + p.framerate = fps; + JAMI_LOG("Custom framerate set to {} fps", fps); + } if (display.find("pipewire") != std::string::npos) { std::string pidStr = "pid:"; std::string fdStr = "fd:"; @@ -534,8 +543,11 @@ VideoInput::initWindowsGrab(const std::string& display) DeviceParams p = jami::getVideoDeviceMonitor().getDeviceParams(DEVICE_DESKTOP); if (winHandlePos != std::string::npos) { - p.input = display.substr(winHandlePos + windowIdStr.size()); // "HANDLE"; - p.name = display.substr(winHandlePos + windowIdStr.size()); // "HANDLE"; + size_t endPos = display.find(' ', winHandlePos + windowIdStr.size()); + p.input = display.substr(winHandlePos + windowIdStr.size(), + endPos - (winHandlePos + windowIdStr.size())); // "HANDLE"; + p.name = display.substr(winHandlePos + windowIdStr.size(), + endPos - (winHandlePos + windowIdStr.size())); // "HANDLE"; p.is_area = 0; } else { p.input = display.substr(1); @@ -562,6 +574,13 @@ VideoInput::initWindowsGrab(const std::string& display) p.height = default_grab_height; } } + std::string fpsStr = "fps:"; + if (display.find(fpsStr) != std::string::npos) { + size_t fpsPos = display.find(fpsStr) + fpsStr.size(); + int fps = std::stoi(display.substr(fpsPos)); + p.framerate = fps; + JAMI_LOG("Custom framerate set to {} fps", fps); + } auto dec = std::make_unique<MediaDecoder>(); if (dec->openInput(p) < 0 || dec->setupVideo() < 0) diff --git a/src/media/video/winvideo/video_device_impl.cpp b/src/media/video/winvideo/video_device_impl.cpp index f614d97f3beb9b4a6e20074a26163b55c4c3ba98..4d44818efe731682c14f5c3650cc61a957db2025 100644 --- a/src/media/video/winvideo/video_device_impl.cpp +++ b/src/media/video/winvideo/video_device_impl.cpp @@ -80,7 +80,8 @@ VideoDeviceImpl::setup() name = DEVICE_DESKTOP; VideoSize size {0, 0}; sizeList_.emplace_back(size); - rateList_[size] = {FrameRate(5), + rateList_[size] = {FrameRate(1), + FrameRate(5), FrameRate(10), FrameRate(15), FrameRate(20),