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