Home | History | Annotate | Download | only in desktop_capture
      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)
     41   SharedXDisplay* x_display() const { return 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)
     48   DesktopConfigurationMonitor* configuration_monitor() const {
     49     return configuration_monitor_;
     50   }
     51   void set_configuration_monitor(
     52       rtc::scoped_refptr<DesktopConfigurationMonitor> m) {
     53     configuration_monitor_ = m;
     54   }
     55 
     56   FullScreenChromeWindowDetector* full_screen_chrome_window_detector() const {
     57     return full_screen_window_detector_;
     58   }
     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.
     67   bool use_update_notifications() const { return 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.
     74   bool disable_effects() const { return disable_effects_; }
     75   void set_disable_effects(bool disable_effects) {
     76     disable_effects_ = disable_effects;
     77   }
     78 
     79 #if defined(WEBRTC_WIN)
     80   bool allow_use_magnification_api() const {
     81     return allow_use_magnification_api_;
     82   }
     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