desktop_capture_device.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_MEDIA_CAPTURE_DESKTOP_CAPTURE_DEVICE_H_
6#define CONTENT_BROWSER_MEDIA_CAPTURE_DESKTOP_CAPTURE_DEVICE_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/threading/thread.h"
11#include "content/common/content_export.h"
12#include "content/public/browser/desktop_media_id.h"
13#include "media/video/capture/video_capture_device.h"
14#include "ui/gfx/native_widget_types.h"
15
16namespace base {
17class SingleThreadTaskRunner;
18class Thread;
19}  // namespace base
20
21namespace webrtc {
22class DesktopCapturer;
23}  // namespace webrtc
24
25namespace content {
26
27// DesktopCaptureDevice implements VideoCaptureDevice for screens and windows.
28// It's essentially an adapter between webrtc::DesktopCapturer and
29// VideoCaptureDevice.
30class CONTENT_EXPORT DesktopCaptureDevice : public media::VideoCaptureDevice {
31 public:
32  // Creates capturer for the specified |source| and then creates
33  // DesktopCaptureDevice for it. May return NULL in case of a failure (e.g. if
34  // requested window was destroyed).
35  static scoped_ptr<media::VideoCaptureDevice> Create(
36      const DesktopMediaID& source);
37
38  virtual ~DesktopCaptureDevice();
39
40  // VideoCaptureDevice interface.
41  virtual void AllocateAndStart(const media::VideoCaptureParams& params,
42                                scoped_ptr<Client> client) OVERRIDE;
43  virtual void StopAndDeAllocate() OVERRIDE;
44
45  // Set the platform-dependent window id for the notification window.
46  void SetNotificationWindowId(gfx::NativeViewId window_id);
47
48 private:
49  friend class DesktopCaptureDeviceTest;
50  class Core;
51
52  DesktopCaptureDevice(scoped_ptr<webrtc::DesktopCapturer> desktop_capturer,
53                       DesktopMediaID::Type type);
54
55  base::Thread thread_;
56  scoped_ptr<Core> core_;
57
58  DISALLOW_COPY_AND_ASSIGN(DesktopCaptureDevice);
59};
60
61}  // namespace content
62
63#endif  // CONTENT_BROWSER_MEDIA_CAPTURE_DESKTOP_CAPTURE_DEVICE_H_
64