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