• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 #ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_CAPTURE_OPTIONS_H_
11 #define WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_CAPTURE_OPTIONS_H_
12 
13 #include "webrtc/base/constructormagic.h"
14 #include "webrtc/base/scoped_ref_ptr.h"
15 
16 #if defined(USE_X11)
17 #include "webrtc/modules/desktop_capture/x11/shared_x_display.h"
18 #endif
19 
20 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
21 #include "webrtc/modules/desktop_capture/mac/desktop_configuration_monitor.h"
22 #include "webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.h"
23 #endif
24 
25 namespace webrtc {
26 
27 // An object that stores initialization parameters for screen and window
28 // capturers.
29 class DesktopCaptureOptions {
30  public:
31   // Creates an empty Options instance (e.g. without X display).
32   DesktopCaptureOptions();
33   ~DesktopCaptureOptions();
34 
35   // Returns instance of DesktopCaptureOptions with default parameters. On Linux
36   // also initializes X window connection. x_display() will be set to null if
37   // X11 connection failed (e.g. DISPLAY isn't set).
38   static DesktopCaptureOptions CreateDefault();
39 
40 #if defined(USE_X11)
x_display()41   SharedXDisplay* x_display() const { return x_display_; }
set_x_display(rtc::scoped_refptr<SharedXDisplay> x_display)42   void set_x_display(rtc::scoped_refptr<SharedXDisplay> x_display) {
43     x_display_ = x_display;
44   }
45 #endif
46 
47 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
configuration_monitor()48   DesktopConfigurationMonitor* configuration_monitor() const {
49     return configuration_monitor_;
50   }
set_configuration_monitor(rtc::scoped_refptr<DesktopConfigurationMonitor> m)51   void set_configuration_monitor(
52       rtc::scoped_refptr<DesktopConfigurationMonitor> m) {
53     configuration_monitor_ = m;
54   }
55 
full_screen_chrome_window_detector()56   FullScreenChromeWindowDetector* full_screen_chrome_window_detector() const {
57     return full_screen_window_detector_;
58   }
set_full_screen_chrome_window_detector(rtc::scoped_refptr<FullScreenChromeWindowDetector> detector)59   void set_full_screen_chrome_window_detector(
60       rtc::scoped_refptr<FullScreenChromeWindowDetector> detector) {
61     full_screen_window_detector_ = detector;
62   }
63 #endif
64 
65   // Flag indicating that the capturer should use screen change notifications.
66   // Enables/disables use of XDAMAGE in the X11 capturer.
use_update_notifications()67   bool use_update_notifications() const { return use_update_notifications_; }
set_use_update_notifications(bool use_update_notifications)68   void set_use_update_notifications(bool use_update_notifications) {
69     use_update_notifications_ = use_update_notifications;
70   }
71 
72   // Flag indicating if desktop effects (e.g. Aero) should be disabled when the
73   // capturer is active. Currently used only on Windows.
disable_effects()74   bool disable_effects() const { return disable_effects_; }
set_disable_effects(bool disable_effects)75   void set_disable_effects(bool disable_effects) {
76     disable_effects_ = disable_effects;
77   }
78 
79 #if defined(WEBRTC_WIN)
allow_use_magnification_api()80   bool allow_use_magnification_api() const {
81     return allow_use_magnification_api_;
82   }
set_allow_use_magnification_api(bool allow)83   void set_allow_use_magnification_api(bool allow) {
84     allow_use_magnification_api_ = allow;
85   }
86 #endif
87 
88  private:
89 #if defined(USE_X11)
90   rtc::scoped_refptr<SharedXDisplay> x_display_;
91 #endif
92 
93 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
94   rtc::scoped_refptr<DesktopConfigurationMonitor> configuration_monitor_;
95   rtc::scoped_refptr<FullScreenChromeWindowDetector>
96       full_screen_window_detector_;
97 #endif
98 
99 #if defined(WEBRTC_WIN)
100   bool allow_use_magnification_api_;
101 #endif
102   bool use_update_notifications_;
103   bool disable_effects_;
104 };
105 
106 }  // namespace webrtc
107 
108 #endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_DESKTOP_CAPTURE_OPTIONS_H_
109