Browse Source

fix: ensure DirectX capturer is supported. (backport: 3-0-x) (#13738)

* Ensure DirectX capturer is supported.

* Actually try building on Windows.
trop[bot] 6 years ago
parent
commit
2955b0168c

+ 9 - 3
atom/browser/api/atom_api_desktop_capturer.cc

@@ -22,6 +22,7 @@ using base::PlatformThreadRef;
 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
 #if defined(OS_WIN)
 #include "third_party/webrtc/modules/desktop_capture/win/dxgi_duplicator_controller.h"
+#include "third_party/webrtc/modules/desktop_capture/win/screen_capturer_win_directx.h"
 #include "ui/display/win/display_info.h"
 #endif  // defined(OS_WIN)
 
@@ -61,9 +62,14 @@ void StartHandlingTask(bool capture_window,
                        const gfx::Size& thumbnail_size,
                        atom::api::DesktopCapturer* cap) {
 #if defined(OS_WIN)
-  cap->using_directx_capturer_ =
-      content::desktop_capture::CreateDesktopCaptureOptions()
-          .allow_directx_capturer();
+  if (content::desktop_capture::CreateDesktopCaptureOptions()
+      .allow_directx_capturer()) {
+    // DxgiDuplicatorController should be alive in this scope according to
+    // screen_capturer_win.cc.
+    auto duplicator = webrtc::DxgiDuplicatorController::Instance();
+    cap->using_directx_capturer_ =
+        webrtc::ScreenCapturerWinDirectx::IsSupported();
+  }
 #endif  // defined(OS_WIN)
   std::unique_ptr<webrtc::DesktopCapturer> screen_capturer(
       capture_screen ? content::desktop_capture::CreateScreenCapturer()

+ 1 - 1
atom/browser/api/atom_api_desktop_capturer.h

@@ -36,7 +36,7 @@ class DesktopCapturer : public mate::EventEmitter<DesktopCapturer>,
 
   std::unique_ptr<DesktopMediaList> media_list_;
 #if defined(OS_WIN)
-  bool using_directx_capturer_;
+  bool using_directx_capturer_ = false;
 #endif  // defined(OS_WIN)
 
  protected: