1e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org/* 2e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * 4e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * Use of this source code is governed by a BSD-style license 5e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * that can be found in the LICENSE file in the root of the source 6e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * tree. An additional intellectual property rights grant can be found 7e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * in the file PATENTS. All contributing project authors may 8e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org * be found in the AUTHORS file in the root of the source tree. 9e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org */ 10e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 11e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_H_ 12e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#define WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_H_ 13e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 140a9ed7c31eab2a2c73eb0020c8b278762ad58ea5mcasas@webrtc.org#include <string> 15774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include <vector> 16e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 17774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include "webrtc/base/constructormagic.h" 18af54d4b3a12f79ebcfe10695a8ec2b1da80ab1f4sergeyu@chromium.org#include "webrtc/modules/desktop_capture/desktop_capture_types.h" 19e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#include "webrtc/modules/desktop_capture/desktop_capturer.h" 20e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#include "webrtc/typedefs.h" 21e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 22e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.orgnamespace webrtc { 23e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 2491685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.orgclass DesktopCaptureOptions; 2591685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org 26e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.orgclass WindowCapturer : public DesktopCapturer { 27e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org public: 28af54d4b3a12f79ebcfe10695a8ec2b1da80ab1f4sergeyu@chromium.org typedef webrtc::WindowId WindowId; 29e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 30e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org struct Window { 31e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org WindowId id; 32e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 33e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org // Title of the window in UTF-8 encoding. 34e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org std::string title; 35e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org }; 36e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 37e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org typedef std::vector<Window> WindowList; 38e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 3991685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org static WindowCapturer* Create(const DesktopCaptureOptions& options); 4091685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org 4191685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org // TODO(sergeyu): Remove this method. crbug.com/172183 42e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org static WindowCapturer* Create(); 43e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 44e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org virtual ~WindowCapturer() {} 45e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 46e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org // Get list of windows. Returns false in case of a failure. 47e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org virtual bool GetWindowList(WindowList* windows) = 0; 48e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 49e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org // Select window to be captured. Returns false in case of a failure (e.g. if 50e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org // there is no window with the specified id). 51e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org virtual bool SelectWindow(WindowId id) = 0; 52dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org 53dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org // Bring the selected window to the front. Returns false in case of a 54dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org // failure or no window selected. 55dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org // TODO(jiayl): remove the default impl when FakeWindowCapturer is updated in 56dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org // Chromium. 57dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org virtual bool BringSelectedWindowToFront() { 58dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org return true; 59dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org } 60e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org}; 61e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 62e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org} // namespace webrtc 63e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 64e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_H_ 65e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org 66