From 9ff6b57b94067117c67a87ebea4a87096d918164 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 19 Apr 2021 19:41:14 +0400 Subject: [PATCH] Use common desktop_capturer code on Windows. --- .../SourceFiles/calls/calls_group_call.cpp | 11 ++++- .../SourceFiles/platform/win/windows_dlls.cpp | 22 ++++++++++ Telegram/ThirdParty/tgcalls | 2 +- Telegram/cmake/lib_tgcalls.cmake | 41 +++++++------------ 4 files changed, 47 insertions(+), 29 deletions(-) diff --git a/Telegram/SourceFiles/calls/calls_group_call.cpp b/Telegram/SourceFiles/calls/calls_group_call.cpp index 988ba9599..e6a14abf3 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/calls_group_call.cpp @@ -31,6 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "webrtc/webrtc_media_devices.h" #include "webrtc/webrtc_create_adm.h" +#include #include #include #include @@ -409,8 +410,14 @@ void GroupCall::switchToScreenSharing() { if (isScreenSharing()) { return; } - _videoDeviceId = "desktop_capturer_screen_0"; - _videoCapture->switchToDevice(_videoDeviceId.toStdString()); + auto manager = tgcalls::DesktopCaptureSourceManager( + tgcalls::DesktopCaptureType::Screen); + const auto sources = manager.sources(); + if (!sources.empty()) { + const auto key = sources.front().deviceIdKey(); + _videoDeviceId = QString::fromStdString(key); + _videoCapture->switchToDevice(_videoDeviceId.toStdString()); + } } void GroupCall::setScheduledDate(TimeId date) { diff --git a/Telegram/SourceFiles/platform/win/windows_dlls.cpp b/Telegram/SourceFiles/platform/win/windows_dlls.cpp index e88fad409..be756cfc5 100644 --- a/Telegram/SourceFiles/platform/win/windows_dlls.cpp +++ b/Telegram/SourceFiles/platform/win/windows_dlls.cpp @@ -12,6 +12,28 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include +#include + +HRESULT WINAPI D3D11CreateDevice( + _In_opt_ IDXGIAdapter* pAdapter, + D3D_DRIVER_TYPE DriverType, + HMODULE Software, + UINT Flags, + _In_reads_opt_(FeatureLevels) CONST D3D_FEATURE_LEVEL* pFeatureLevels, + UINT FeatureLevels, + UINT SDKVersion, + _COM_Outptr_opt_ ID3D11Device** ppDevice, + _Out_opt_ D3D_FEATURE_LEVEL* pFeatureLevel, + _COM_Outptr_opt_ ID3D11DeviceContext** ppImmediateContext) { + return S_FALSE; +} + +HRESULT WINAPI CreateDXGIFactory1( + REFIID riid, + _COM_Outptr_ void **ppFactory) { + return S_FALSE; +} + namespace Platform { namespace Dlls { diff --git a/Telegram/ThirdParty/tgcalls b/Telegram/ThirdParty/tgcalls index 01c03d7b4..0f608993f 160000 --- a/Telegram/ThirdParty/tgcalls +++ b/Telegram/ThirdParty/tgcalls @@ -1 +1 @@ -Subproject commit 01c03d7b4cfd7c02c79bab32cc2e688316d1a450 +Subproject commit 0f608993f7a5c9af093f6a7bf21c3b4cd0735ecc diff --git a/Telegram/cmake/lib_tgcalls.cmake b/Telegram/cmake/lib_tgcalls.cmake index 84c1d1ce2..fb465f4f1 100644 --- a/Telegram/cmake/lib_tgcalls.cmake +++ b/Telegram/cmake/lib_tgcalls.cmake @@ -58,15 +58,11 @@ PRIVATE # Desktop capturer desktop_capturer/DesktopCaptureSource.h - desktop_capturer/DesktopCaptureSource.mm + desktop_capturer/DesktopCaptureSource.cpp desktop_capturer/DesktopCaptureSourceHelper.h - desktop_capturer/DesktopCaptureSourceHelper.mm + desktop_capturer/DesktopCaptureSourceHelper.cpp desktop_capturer/DesktopCaptureSourceManager.h - desktop_capturer/DesktopCaptureSourceManager.mm - desktop_capturer/DesktopCaptureSourceView.h - desktop_capturer/DesktopCaptureSourceView.mm - desktop_capturer/DesktopSharingCapturer.h - desktop_capturer/DesktopSharingCapturer.mm + desktop_capturer/DesktopCaptureSourceManager.cpp # Group calls group/GroupInstanceCustomImpl.cpp @@ -91,6 +87,10 @@ PRIVATE # iOS / macOS platform/darwin/DarwinInterface.h platform/darwin/DarwinInterface.mm + platform/darwin/DesktopCaptureSourceView.h + platform/darwin/DesktopCaptureSourceView.mm + platform/darwin/DesktopSharingCapturer.h + platform/darwin/DesktopSharingCapturer.mm platform/darwin/GLVideoView.h platform/darwin/GLVideoView.mm platform/darwin/GLVideoViewMac.h @@ -123,8 +123,6 @@ PRIVATE # POSIX # Teleram Desktop - platform/tdesktop/DesktopCapturer.cpp - platform/tdesktop/DesktopCapturer.h platform/tdesktop/DesktopInterface.cpp platform/tdesktop/DesktopInterface.h platform/tdesktop/VideoCapturerInterfaceImpl.cpp @@ -167,6 +165,10 @@ elseif (APPLE) WEBRTC_MAC ) remove_target_sources(lib_tgcalls ${tgcalls_loc} + platform/darwin/DesktopCaptureSourceView.h + platform/darwin/DesktopCaptureSourceView.mm + platform/darwin/DesktopSharingCapturer.h + platform/darwin/DesktopSharingCapturer.mm platform/darwin/GLVideoView.h platform/darwin/GLVideoView.mm platform/darwin/GLVideoViewMac.h @@ -179,10 +181,12 @@ elseif (APPLE) platform/darwin/VideoMetalViewMac.mm platform/tdesktop/DesktopInterface.cpp platform/tdesktop/DesktopInterface.h - platform/tdesktop/VideoCapturerTrackSource.cpp - platform/tdesktop/VideoCapturerTrackSource.h platform/tdesktop/VideoCapturerInterfaceImpl.cpp platform/tdesktop/VideoCapturerInterfaceImpl.h + platform/tdesktop/VideoCapturerTrackSource.cpp + platform/tdesktop/VideoCapturerTrackSource.h + platform/tdesktop/VideoCameraCapturer.cpp + platform/tdesktop/VideoCameraCapturer.h ) elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") target_compile_definitions(lib_tgcalls @@ -191,22 +195,7 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") ) endif() -if (NOT APPLE) - remove_target_sources(lib_tgcalls ${tgcalls_loc} - desktop_capturer/DesktopCaptureSource.h - desktop_capturer/DesktopCaptureSource.mm - desktop_capturer/DesktopCaptureSourceHelper.h - desktop_capturer/DesktopCaptureSourceHelper.mm - desktop_capturer/DesktopCaptureSourceManager.h - desktop_capturer/DesktopCaptureSourceManager.mm - desktop_capturer/DesktopSharingCapturer.h - desktop_capturer/DesktopSharingCapturer.mm - ) -endif() - remove_target_sources(lib_tgcalls ${tgcalls_loc} - desktop_capturer/DesktopCaptureSourceView.h - desktop_capturer/DesktopCaptureSourceView.mm platform/android/AndroidContext.cpp platform/android/AndroidContext.h platform/android/AndroidInterface.cpp