desktop_capture_device.h revision 0de6073388f4e2780db8536178b129cd8f6ab386
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 "content/common/content_export.h"
11#include "content/public/browser/desktop_media_id.h"
12#include "media/video/capture/video_capture_device.h"
13#include "ui/gfx/native_widget_types.h"
14
15namespace base {
16class SequencedTaskRunner;
17class Thread;
18}  // namespace base
19
20namespace webrtc {
21class DesktopCapturer;
22}  // namespace webrtc
23
24namespace content {
25
26// DesktopCaptureDevice implements VideoCaptureDevice for screens and windows.
27// It's essentially an adapter between webrtc::DesktopCapturer and
28// VideoCaptureDevice.
29class CONTENT_EXPORT DesktopCaptureDevice : public media::VideoCaptureDevice {
30 public:
31  // Creates capturer for the specified |source| and then creates
32  // DesktopCaptureDevice for it. May return NULL in case of a failure (e.g. if
33  // requested window was destroyed).
34  static scoped_ptr<media::VideoCaptureDevice> Create(
35      const DesktopMediaID& source);
36
37  virtual ~DesktopCaptureDevice();
38
39  // VideoCaptureDevice interface.
40  virtual void AllocateAndStart(const media::VideoCaptureParams& params,
41                                scoped_ptr<Client> client) OVERRIDE;
42  virtual void StopAndDeAllocate() OVERRIDE;
43
44  // Set the platform-dependent window id for the notification window.
45  void SetNotificationWindowId(gfx::NativeViewId window_id);
46
47 private:
48  friend class DesktopCaptureDeviceTest;
49  class Core;
50
51  // Either |task_runner| or |thread| should be non-NULL, but not both.
52  DesktopCaptureDevice(scoped_refptr<base::SequencedTaskRunner> task_runner,
53                       scoped_ptr<base::Thread> thread,
54                       scoped_ptr<webrtc::DesktopCapturer> desktop_capturer,
55                       DesktopMediaID::Type type);
56
57  scoped_refptr<Core> core_;
58
59  DISALLOW_COPY_AND_ASSIGN(DesktopCaptureDevice);
60};
61
62}  // namespace content
63
64#endif  // CONTENT_BROWSER_MEDIA_CAPTURE_DESKTOP_CAPTURE_DEVICE_H_
65