16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef REMOTING_HOST_FAKE_DESKTOP_CAPTURER_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define REMOTING_HOST_FAKE_DESKTOP_CAPTURER_H_ 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/callback.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "media/base/media_export.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/screen_capture_frame_queue.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace remoting { 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// A FakeDesktopCapturer generates artificial image for testing purpose. 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// FakeDesktopCapturer is double-buffered as required by DesktopCapturer. 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class FakeDesktopCapturer : public webrtc::DesktopCapturer { 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // By default FakeDesktopCapturer generates frames of size kWidth x kHeight, 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // but custom frame generator set using set_frame_generator() may generate 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // frames of different size. 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static const int kWidth = 800; 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static const int kHeight = 600; 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) typedef base::Callback<scoped_ptr<webrtc::DesktopFrame>( 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) webrtc::DesktopCapturer::Callback* callback)> FrameGenerator; 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FakeDesktopCapturer(); 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~FakeDesktopCapturer(); 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void set_frame_generator(const FrameGenerator& frame_generator); 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // webrtc::DesktopCapturer interface. 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Start(Callback* callback) OVERRIDE; 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Capture(const webrtc::DesktopRegion& rect) OVERRIDE; 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FrameGenerator frame_generator_; 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Callback* callback_; 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopCapturer); 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace remoting 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // REMOTING_HOST_FAKE_DESKTOP_CAPTURER_H_ 51